PHP

docker-phd-ja の文字化けを修正したり、イメージを分割したり

引き続き docker-phd-ja (PHPマニュアル日本語版ビルド用Dockerイメージ)の改善を進めています。今日は下記の3点を主に進めました。

日本語の文字化けを修正

Dockerコンテナに入って vim で日本語マニュアル用のソースファイルを開いたら、思いっきり文字化けしていることに気づきました。完全にチェック漏れです。

解決のため、locales-all パッケージを入れて LANG を設定しました。修正前に試そうとしてくださった方、申し訳ありません。

イメージの分割

CircleCI でのビルドに少し時間がかかっていたので、テストに関係ない部分を別イメージに切り出しました。具体的には Subversion からのチェックアウト部分です。

ビルドの速度を追求するなら nginx のインストールなども別イメージのほうに移すべきなのですが、CI に特化したイメージを作るのは主客転倒な気がしています(もっと遅くなったら考えが変わるかもしれません)。「特定リビジョンのソースがチェックアウトされたイメージ」なら論理的な意味があると思い、それにとどめました。

Docker Hub リポジトリの再作成

CircleCI の利用によりオートメーションビルドではなくなったのですが、Docket Hub 上ではオートメーションビルド扱いのままだったので、いったん削除して通常のリポジトリとして再作成しました。

PHPマニュアル日本語版ビルド用DockerイメージのCI環境、こんな感じでどうでしょうか

先日公開したPHPマニュアル日本語版ビルド用Dockerイメージ(iwamot/phd-ja)について、CircleCI でテストにパスした場合にだけ、イメージを Docker Hub にプッシュするようにしてみました。

ただ、なんでもかんでもプッシュするわけにはいかないので、下記のように処理させています。

master ブランチを GitHub リポジトリにプッシュした場合
CircleCI 上でイメージをビルドし、テストにパスした場合にだけ、latest イメージが Docker Hub にプッシュされます。
タグを GitHub リポジトリにプッシュした場合
CircleCI 上でイメージをビルドし、テストにパスした場合にだけ、同名タグ付きのイメージと latest イメージが Docker Hub にプッシュされます。
master 以外のブランチを GitHub リポジトリにプッシュした場合
CircleCI 上でイメージをビルドし、テストします。パスしても Docker Hub にはプッシュしません。
パスしなかった場合、そのブランチから master ブランチへのプルリクエストはマージできません(GitHub の「Branch protection rules」を利用)。

処理の詳細は .circleci/config.yml で定義されています。実装にあたっては「CircleCI2.0でDockerをビルドしてDocker HubにPushするまで」という記事がたいへん参考になりました。

なお、テストフェーズでは「ビルドされたマニュアルのトップページが参照できること」を確認しています。下記が該当部分です。

- run:
    name: Run test
    command: docker run --network container:phd-ja appropriate/curl --retry 10 --retry-connrefused http://localhost/phd-ja/

今回ご紹介したCI環境で今は満足していますが、改善すべき点があるかもしれません。何かお気づきの方は、お知らせいただければ幸いです。

Docker環境でPHPマニュアルの翻訳に参加してみませんか?

PHPマニュアルの日本語版をビルドするためのDockerイメージを公開しました。

このイメージを使うと、手間のかかる設定をせずに、PHPマニュアルの日本語翻訳が始められます。

翻訳の始め方

まずはオンラインエディタにログインし、翻訳対象ファイルを決め、翻訳を進めていきます。このあたりは以前Qiitaに書いた「PHPマニュアル日本語版にパッチを送る」が参考になるかと思います。

いい感じに翻訳できたら、表示を確認するため、Dockerコンテナ上でファイルを編集し、マニュアルをビルドしてみましょう。たとえば、ja/language/predefined/error/getcode.xml を編集する場合は下記のような手順になります。

# Dockerイメージを取得
docker pull iwamot/phd-ja

# コンテナを起動
docker run -it -p 8080:80 --name phd-ja iwamot/phd-ja

# 最新のソースを取得
docker exec phd-ja ../scripts/phd-update

# コンテナのbashに入る
docker exec -it phd-ja bash

# ファイルを編集し、コンテナから抜ける
vi ja/language/predefined/error/getcode.xml
exit

# マニュアルをビルド
docker exec phd-ja ../scripts/phd-build

編集内容は http://localhost:8080/phd-ja/error.getcode.html で確認できます。違和感がなければオンラインエディタに戻り、パッチを送ってみましょう。


追記(2018-06-27)

この記事を公開後、改善を進めて、ファイルの編集やビルドがブラウザ上でできるようになっています。詳細は下記の記事をご参照ください。


イメージを公開した理由

PHPマニュアルのビルド環境を作るのには手間がかかります。PHP5環境の準備、Subversionリポジトリのチェックアウト、PhDのインストール、HTTPサーバの設定などが必要なためです。この手間を省ければ、翻訳への参加者が増えるかもしれないと考えました。

日本語への翻訳率は63%と比較的高いのですが、それでも現時点で4000ファイル以上が未翻訳、700ファイル以上が古くなっている状況です。翻訳率を高めるには、参加者を増やすのが効果的だと思っています。

改善案などの連絡手段

「Dockerfileのベストプラクティスはこうだよ」とか「テストがないけど、こんなふうに書いたらいいんじゃない?」とか「素のデザインだと見づらいのでCSSを書いてみたよ」とか、何かしらお気づきの点がありましたら、GitHubのプルリクエストやissue、Twitterなどでお知らせいただければ幸いです。

ぼくはこれまでサーバ上に直接、ビルド環境を作っていましたが、今後はこのDockerコンテナで作業します。不便を感じたら、随時改善して公開イメージに反映していきます。

プロフィール
Web開発者。現在の関心事はシステム品質の改善(特に性能効率性と保守性)。JAPAN MENSA会員。
カテゴリ別アーカイブ
記事検索