49hack

ゆるふわエンジニアが魔法使いになるまで

技術書典で買った「さわって学べる!iOSテスト駆動開発」を読んだのでその感想と3章の誤植の共有

今年の技術書典ではboothでiOS中心に10冊ほど買いました。

今回読んだ本はこれ👇

shindyu.booth.pm

swiftでテストを書いたことがなかったので、TDDを勉強するというよりは、その書き方や導入が把握できればいいかなー、と思って読んでみました。
結果、とてもわかりやすく体系的に学べたので無事テストを書いていけそうです。
これで1,000円とは、お買い得な世の中ですね🤗

TDDをやっていて一つ気になったのが、
「プロパティや関数名をまだ宣言してないのでコード補完が効かなくてつらい問題」
特にtableviewまわりはメソッド名長すぎてtypoがつらい😢

こういうのってどうしてんだろうなーと思って友人のエンジニアに聞いてみたら、

まずは「tableviewがあること」みたいなテストを書いてプロパティつくっていくかなー。 そのテストが通ってればtableviewのコード補完も効くしね。

と言われて、なるほど!!と思った💡

その他メモ

  • Dependency Injectionの中にはConstructor InjectionとSetter Injectionなるものがある
  • 初耳のアーキテクチャがあった
    • MVP, VIPER
  • 既存アプリにTDDを導入する手順は参考になった
    • ビルド時間の計測
      • BuildTimeAnalyzerはそのうち使ってみる
    • Carthageへの移行
    • Embedded Frameworkの利用
    • CIの導入
      • CircleCIは経験済みなのでbitrise使ってみる

3章の誤植の共有

3章は実際にアプリをつくっていく流れだったので、理解のために写経しました。
途中でビルドやテストが通らなくて困ったので、「こうやったら進行できたよ」という共有です。
同じように写経する人の参考になれば😉


p.38 ファイル名が間違っている

ArticleListViewControllerTests.swiftArticleListViewController.swift

p.39 宣言文が間違っていてテストが通らない

// この部分を
let vc ArticleListViewController()

// こう書き換える
let article = Article(title: "記事タイトル")
let client = FakeArticleListAPIClient(fakeResponse: [article])
let vc = ArticleListViewController(client: client)

p.41 itemsの初期化をしていないのでビルドが通らない

// この部分を
var items: [Article]

// こう書き換える
var items: [Article] = []

p.42 tableviewにcellを登録してないので落ちる

// この一行をviewDidLoadに追加する
tableView.register(ArticleListCell.self, forCellReuseIdentifier: "ArticleListCell")

p.45 moduleをimportしてないのでテストできない

// ArticleListViewControllerTests.swiftに追加する
import SafariServices

以上です。
swiftやってくぞ!💪

nginx+wordpressのdocker環境を構築する

はじめに

localにwordpressが動く環境がすでにあったのですが、メンバーの新規参入時など環境構築が大変だったのでdockerで環境を構築できるようにしました。

dockerはこの本を読んで勉強しました👇

とおもったらもう第二版が出ていた😮

プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化

プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化

dockerでwordpress環境をつくるサンプルはたくさんあったのですが、一からwordpressをつくっていくものだったりapache前提だったりとちょっと要件が違う・・・🤔

今回は「既存のnginx+wordpress環境をdockerで構築する」をやっていきます💪

主にこの記事を参考にしました。とてもわかりやすかったです🙏
docker-compose で作る nginx + PHP-FPM7 + HTTP/2 に対応したモダンな WordPress 開発環境 – PSYENCE:MEDIA

ってことでまとめます。

移行の方針

  • nginx, wordpressの動く環境をdockerで構築する
    • apacheが入っていないイメージを使う
  • mysqlはlocalで動いているものをそのまま使う
    • のちのち本番をdocker化するにしてもRDSを使うので問題ないはず🤔

ディレクトリ構成

❯ tree . -L 2
.
├── docker-compose.yml
├── nginx
│   └── default.conf
└── my_wordpress
    ├── index.php
    ├── ...

docker-compose.yml

読んだ本ではversion2の書き方でしたが、version3で書いてみました😉
記述がいろいろ省略されてたりしていたけどそんなに大変じゃなかった💪
イメージのバージョンは既存の環境に合わせてるだけなので、最新を使えるなら最新を使ったほうがいいです👌
wordpressのイメージはtagを指定してapacheが入っていないものを使います。

version: '3'
services:
  nginx:
    image: nginx:1.15.3-alpine
    restart: always
    ports:
      - "8082:80"
    depends_on:
      - wordpress
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
      - ./my_wordpress:/var/www/html

  wordpress:
    image: wordpress:4.9.8-php5.6-fpm-alpine
    restart: always
    volumes:
      - ./my_wordpress:/var/www/html

nginx.conf

fastcgi_passにはdocker-compose.ymlに記述したservice名を指定します。(今回はwordpress

server {
  listen 80;
  server_name _;

  root  /var/www/html;
  index index.php;

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;

  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(\.+)$;
    fastcgi_pass wordpress:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }
}

いざdockerを起動

$ docker-compose up -d

で起動して、 http://localhost:8082 で既存のwordpressページが表示されればOK👍

おまけ

よく使うコマンド

コンテナを起動する

$ docker-compose up -d

コンテナを停止する

$ docker-compose stop

コンテナを再起動する

$ docker-compose restart

logを見とく

$ docker-compose logs -f

コンテナに入る

$ docker exec -it {container_name} sh

dockerイメージの履歴を見る

$ docker history {image}

今回、wordpressイメージの違いを見るために使いました。

❯ docker history wordpress
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
41e689eea0cd        3 weeks ago         /bin/sh -c #(nop)  CMD ["apache2-foreground"]   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop) COPY file:40bd880f26da3ada…   7.62kB
<missing>           3 weeks ago         /bin/sh -c set -ex;  curl -o wordpress.tar.g…   27.3MB
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV WORDPRESS_SHA1=0945ba…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV WORDPRESS_VERSION=4.9…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  VOLUME [/var/www/html]       0B
<missing>           3 weeks ago         /bin/sh -c a2enmod rewrite expires              60B
<missing>           3 weeks ago         /bin/sh -c {   echo 'opcache.memory_consumpt…   171B
<missing>           3 weeks ago         /bin/sh -c set -ex;   savedAptMark="$(apt-ma…   3.5MB
<missing>           5 weeks ago         /bin/sh -c #(nop)  CMD ["apache2-foreground"]   0B
<missing>           5 weeks ago         /bin/sh -c #(nop)  EXPOSE 80/tcp                0B
<missing>           5 weeks ago         /bin/sh -c #(nop) WORKDIR /var/www/html         0B
<missing>           5 weeks ago         /bin/sh -c #(nop) COPY file:24613ecbb1ce6a09…   1.35kB
<missing>           5 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["docker-php-e…   0B
<missing>           5 weeks ago         /bin/sh -c docker-php-ext-enable sodium         20B
<missing>           5 weeks ago         /bin/sh -c #(nop) COPY multi:c925dfb355ea16b…   6.44kB
<missing>           5 weeks ago         /bin/sh -c set -eux;   savedAptMark="$(apt-m…   56.9MB
<missing>           5 weeks ago         /bin/sh -c #(nop) COPY file:207c686e3fed4f71…   587B
<missing>           5 weeks ago         /bin/sh -c set -xe;   fetchDeps='   wget  ';…   13.4MB
<missing>           5 weeks ago         /bin/sh -c #(nop)  ENV PHP_SHA256=3585c1222e…   0B
<missing>           5 weeks ago         /bin/sh -c #(nop)  ENV PHP_URL=https://secur…   0B
<missing>           5 weeks ago         /bin/sh -c #(nop)  ENV PHP_VERSION=7.2.9        0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV GPG_KEYS=1729F83938DA…   0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHP_LDFLAGS=-Wl,-O1 -…   0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHP_CPPFLAGS=-fstack-…   0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHP_CFLAGS=-fstack-pr…   0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHP_EXTRA_CONFIGURE_A…   0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHP_EXTRA_BUILD_DEPS=…   0B
<missing>           2 months ago        /bin/sh -c {   echo '<FilesMatch \.php$>';  …   237B
<missing>           2 months ago        /bin/sh -c set -ex  && . "$APACHE_ENVVARS"  …   33B
<missing>           2 months ago        /bin/sh -c a2dismod mpm_event && a2enmod mpm…   68B
<missing>           2 months ago        /bin/sh -c set -ex   && sed -ri 's/^export (…   1.92kB
<missing>           2 months ago        /bin/sh -c #(nop)  ENV APACHE_ENVVARS=/etc/a…   0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV APACHE_CONFDIR=/etc/a…   0B
<missing>           2 months ago        /bin/sh -c apt-get update  && apt-get instal…   42.3MB
<missing>           2 months ago        /bin/sh -c mkdir -p $PHP_INI_DIR/conf.d         0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHP_INI_DIR=/usr/loca…   0B
<missing>           2 months ago        /bin/sh -c apt-get update && apt-get install…   209MB
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHPIZE_DEPS=autoconf …   0B
<missing>           2 months ago        /bin/sh -c set -eux;  {   echo 'Package: php…   46B
<missing>           2 months ago        /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:919939fa022472751…   55.3MB

あー、apache入ってるなー。🧐

❯ docker history wordpress:4.9.8-php5.6-fpm-alpine
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
7d3fe91e2ab2        3 weeks ago         /bin/sh -c #(nop)  CMD ["php-fpm"]              0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop) COPY file:40bd880f26da3ada…   7.62kB
<missing>           3 weeks ago         /bin/sh -c set -ex;  curl -o wordpress.tar.g…   27.3MB
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV WORDPRESS_SHA1=0945ba…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV WORDPRESS_VERSION=4.9…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  VOLUME [/var/www/html]       0B
<missing>           3 weeks ago         /bin/sh -c {   echo 'opcache.memory_consumpt…   171B
<missing>           3 weeks ago         /bin/sh -c set -ex;   apk add --no-cache --v…   3.52MB
<missing>           3 weeks ago         /bin/sh -c apk add --no-cache   bash   sed      1.5MB
<missing>           3 weeks ago         /bin/sh -c #(nop)  CMD ["php-fpm"]              0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  EXPOSE 9000/tcp              0B
<missing>           3 weeks ago         /bin/sh -c set -ex  && cd /usr/local/etc  &&…   23.4kB
<missing>           3 weeks ago         /bin/sh -c #(nop) WORKDIR /var/www/html         0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["docker-php-e…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop) COPY multi:af8a06a5cfc82b1…   6.43kB
<missing>           3 weeks ago         /bin/sh -c set -xe  && apk add --no-cache --…   34.7MB
<missing>           3 weeks ago         /bin/sh -c #(nop) COPY file:207c686e3fed4f71…   587B
<missing>           3 weeks ago         /bin/sh -c set -xe;   apk add --no-cache --v…   13.8MB
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_SHA256=5000d82610…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_URL=https://secur…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_VERSION=5.6.37       0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV GPG_KEYS=0BD78B5F9750…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_LDFLAGS=-Wl,-O1 -…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_CPPFLAGS=-fstack-…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_CFLAGS=-fstack-pr…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_EXTRA_CONFIGURE_A…   0B
<missing>           3 weeks ago         /bin/sh -c mkdir -p $PHP_INI_DIR/conf.d         0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_INI_DIR=/usr/loca…   0B
<missing>           3 weeks ago         /bin/sh -c set -x  && addgroup -g 82 -S www-…   4.85kB
<missing>           3 weeks ago         /bin/sh -c apk add --no-cache --virtual .per…   2.69MB
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHPIZE_DEPS=autoconf …   0B
<missing>           2 months ago        /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:25f61d70254b9807a…   4.41MB

こっちはapache入ってない。採用!

以上です🤗

開発合宿@河口湖がすごく良かったというお話

f:id:paranishian:20180915082219j:plain

先日行った開発合宿@河口湖がすごく良かったのでブログに記録していきます。

文才がみじんこなのでそこは写真で補うスタイル🤗

今回はここにお邪魔しました。

www.c-ban.com

金曜夜から出発し、22時頃に河口湖カントリーコテージに到着。

まずは買い込んだお酒とボドゲを堪能し、夜更かし気味で就寝。

f:id:paranishian:20180915003750j:plain
タイムボムおもしろい

翌朝からさっそく活動開始!

敷地内にあるカフェで朝飯(朝食セット:800円)を平らげ、

f:id:paranishian:20180915090647j:plain
ポトフがうめぇ。。。

チェックアウトを済ませ、そのままカフェで開発スタート!

カフェの貸し切りって普段はしてないらしいのですが、交渉の末?、開発合宿で利用できることになりました。

そういえば、施設の人に「今日はどういうことするの?」って聞かれて、 「世界を少しでも幸せにするもの作りに来ました」ってゆったらなんかハマってめっちゃ気に入られた。

あと、spotifyでてきとーに音楽流してたら「まるで東京のカフェみたいだね」って嬉しそうに笑ってくれた。

なにこの癒し空間、、、すてき。

f:id:paranishian:20180915111431j:plain

カフェにはWIFIも電源もあるのでどこで開発してもよし。

あいにくのお天気やったけど、景色が最高。のどかすぎる。。こういうとこでずっと開発していたい。。

開発メンバーみんな1週間くらいここでリモートしたいってずーっとゆってた。

f:id:paranishian:20180915123322j:plain

ランチにはカレーが提供されたので、なんだか林間学校気分。

f:id:paranishian:20180915123047j:plain

カレーのあとはオーバークックで遊んでリフレッシュ。 f:id:paranishian:20180915132014j:plain

このゲーム最高すぎやしませんかね。。 ec.nintendo.com

休憩はほどほどに、開発を再開し、あっというまに17時。

そこから各々開発したものを発表していきました。

f:id:paranishian:20180918093329j:plain
Elixir + Phoenixでツール作ってみた

f:id:paranishian:20180915174437j:plain
Reactでwebサービス作ってみた

f:id:paranishian:20180915171035j:plain
こ、、こいつは・・・!!

途中でデモが動かなくなって、みんなでモブプロみたいに解決したのもおもしろかった。

僕は個人開発の塩漬けになりかけたものをswift + firebaseで復活させるべく奮闘しました。NoSQLにまだ慣れない/(^o^)\

実はやりたいことがあるけど腰が重くてなかなか手が出せないでいる。。。みたいなものの背中を押してあげるのに、開発合宿ってちょうどいいなとおもった。

こういうきっかけ作りに貢献できるの素敵やし、将来田舎に移住する予定なので、地方でなにかそういった活動ができたらいいなとふんわり思った。

なにはともあれ、リリースするまでが勝負なのでこのまま勢いを落とさず頑張るゾイ!

それでは👋