TED日本語 - ジェニフェアー・シニア: 幸福は親には高すぎるハードル | デジタルキャスト
すばらしい。
育児に対する漠然とした不安や、時には頭を抱えたくなるほどの煩わしさ、そしてそれを補って余りある幸福感の正体と、なにを目的として育児に取り組むべきかを情熱的に説いてくれています。
すべてのエンジニアが伴侶と子宝に恵まれ、仕事と育児と趣味の狭間でもがき苦しみますように。
TED日本語 - クリス・ハドフィールド: 宇宙で目が見えなくなり学んだ事は | デジタルキャスト
おもしろかった。
Netflix 社が障害に備えるために人工的に障害を起こし続ける話を思い出しました。
東京リカーランド北千住東口店がヤバい
久しぶりに寄ったらとんでもないことになっていたのでご紹介。
とは言えちょっとググったらすぐに有用な情報が見つかったので、まずはこれらを読んでもらうとして。
- [日本と世界のビールレポート by びあトモ | 東京リカーランド] びあトモ for another pint of BEER
- 東京リカーランド北千住店~東TOKIOのクラフトビールの聖地は、やっぱりヤヴァかった! | フリーライター黒崎正刀の、飲んだくれ手記
- 東京リカーランド(北千住) ~東東京のクラフトビールの聖地、再訪 | フリーライター黒崎正刀の、飲んだくれ手記
当日のツイート
連投したらフォロワーが五人くらい減った当日のツイート。
まずはシングルホップシリーズで有名な ミッケラー の変わり種。左下の方にはコピ・ルアックというネコのうんこから取るコーヒー豆を使ったインペリアルスタウトとか置いてありました。なに言ってるか分からないですよね。書いているこっちもよく分かりません。
ミッケラーのこの辺見たことない pic.twitter.com/iuofq720U1
— でくのぼう.do (@garbagetown) 2015, 5月 9
見たことも聞いたこともないローグ・ブードゥードーナッツ・ベーコン・メイプル・エール。「この夏はこれで乾杯しよう!世界のユニークすぎるビール5選 | RETRIP」 によると甘じょっぱいらしい。
ベーコン・メイプル・エールってなに… pic.twitter.com/iDEZIrGHPI
— でくのぼう.do (@garbagetown) 2015, 5月 9
たんごさん がうまいと言っていたアメリカのレフトハンド醸造所のミルクスタウト。ミルクスタウトというスタイルそのものを知らなかった。
たんごさんが言ってたレフトハンドのミルクスタウトもあった。ナイトロとか言う上位版っぽいのもある pic.twitter.com/S4N0srnG86
— でくのぼう.do (@garbagetown) 2015, 5月 9
入手困難という噂のデリリウムの 25 周年記念限定瓶。となりのデリリウムレッドはいわゆるレッドビールではなくて、トレメンスにチェリーを漬け込んだフルーツビール。ものすごくおいしいのでおすすめ。
激レアと言われているらしいデリリウムの25周年もレッドも余裕で置いてある pic.twitter.com/5qJszbHCp8
— でくのぼう.do (@garbagetown) 2015, 5月 9
よこなさん が飲んでいた PUNK IPA をはじめ、ここ数年で急激に知名度を上げたスコットランドの ブリュードッグ もずらり。
よこなさんが飲んでたPUNK IPAはじめブリュードッグも勢揃い pic.twitter.com/poiDjTK8ZJ
— でくのぼう.do (@garbagetown) 2015, 5月 9
こざけさん が大好きなパウエルクワックのギフトセットもある。こざけさんは高いと言っていたけど、あのグラスがそもそも 3,000 円くらいする ので、小瓶四本付いてきてこの値段はむしろ良心的。
こざけることもできる pic.twitter.com/8PPHWdxzT1
— でくのぼう.do (@garbagetown) 2015, 5月 9
買った
たんごさんおすすめのミルクスタウト。楽しみ。
デリリウムレッドは見掛けるたびに買ってしまう。自宅に帰ってみたらもう一本あった。
ブリュードッグとミッケラーのコラボ作品。IBU 130 とのことなのでめっちゃ苦そう。
ジャケ買い。スト II 世代として買わずにいられなかった。IPA らしい。
箕面ヴァイツェン。なんか海外の色モノばかり買っちゃった感があったので。
その他補足
自分が北千住に移り住んだ 2006 年には東京リカーランドは東口店と西口店があって、当時は両店ともつまらない街の酒屋だった。西口店の急な階段を登った二階に「びあマ」、三階に「ワイマ」ができたのが 2011 年くらいだったと思う。
その頃から輸入ビールの品揃えはなかなか良かったけど、場所のせいか急な階段のせいか、お客さんはあまり多くなくて、店員さんがいつも魔女の宅急便にみたいに暇そうにカウンターに座っていたのをよく覚えている。
その後しばらくして西口店が閉鎖することになり、在庫一掃セールがあって一気に 10 本くらい買った。そのとき「これだけの品揃えの店がなくなるのは惜しい」と言ったら、「東口店に移設するからそっちに来てくれ」と言われてほっとしたわけだけど、まさかここまで本気の店になるとは思っていなかった。
交通の便がいいとか大学の誘致に成功したとか、そういう理由で北千住に不動産を買ったんだけど、東京リカーランドは完全に嬉しい誤算だった。これからも積極的にお金を落としていきたい。
Hadoop を 30 分で試す
ややチート気味ですが Hadoop を 30 分で試すことができたのでお知らせします。
経緯
先日のブログ に書いた通り、Cloudera QuickStart VM はとても便利なのですが、メモリをめちゃくちゃ喰うので一般的なご家庭にあるスペックのマシンではまともに動きません。
なんでそんなにメモリを喰うかと言うと、おそらく Hive やら何やらごっちゃり入っているからで、とりあえず MapReduce を動かしてみたいだけの人には、少々オーバースペックである感が否めません。
お仕着せの環境が肌に合わないからと言って自分で環境をこしらえようにも、初心者に疑似分散とか YARN とか言われてもどうしていいか分かりませんし、Oracle JDK のインストールが地味に面倒です。
このような実情を身に染みて感じたので、以下の内容を参考に Cent OS 上に疑似分散モードの YARN 環境を作る Ansible Playbook を書いて Ansible Galaxy にアップロードしてみました。
ご用意頂くもの
- メモリ 4GB 程度のマシン
- VirtualBox
- Vagrant
- Cent OS 6.4
一般的なご家庭に Linux 物理マシンなどあるわけがないので、以下では仮想マシンを使用します。
また、VirtualBox や Vagrant, Cent OS の box などを用意済みとしている点に若干キユーピー 3 分クッキング的な突っ込みどころを感じますが、意識の高いエンジニアであれば、これくらいの備えは常識の範囲内としても差し支えないでしょう。
手順
以下、実施する手順を掛かる時間の目安と併せて紹介します。
Mac OS で動かした際のログを紹介していますが、Windows でも動くと思います。プロキシの配慮は省略しているので、企業 LAN 内などで試す際はがんばってください。
仮想マシンの用意 (5 分)
適当なディレクトリを掘って Vagrant 仮想マシンを初期化します。box の名前は自身の環境に合わせて読み替えてください。
$ mkdir cdh5; cd cdh5 $ vagrant box list CentOS-6.4-x86_64 (virtualbox, 0) (snip) $ vagrant init CentOS-6.4-x86_64
Vagarnt が仮想マシンに割り当てるメモリ容量はデフォルトで 480 MB で、さすがにこれでは MapReduce が動きません。Vagrantfile には 1024 MB を割り当てる設定例が記載されているので、コメントアウトを外して設定を有効にします。
$ vi Vagrantfile $ grep -A 1 -B 9 modifyvm Vagrantfile # Provider-specific configuration so you can fine-tune various # backing providers for Vagrant. These expose provider-specific options. # Example for VirtualBox: # config.vm.provider "virtualbox" do |vb| # # Don't boot with headless mode # vb.gui = true # # Use VBoxManage to customize the VM. For example to change memory: vb.customize ["modifyvm", :id, "--memory", "1024"] end
設定が済んだら仮想マシンを起動します。2, 3 分あれば起動すると思います。
$ vagrant up (snip) ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Configuring and enabling network interfaces... ==> default: Mounting shared folders... default: /vagrant => /Users/garbagetown/dev/vagrants/cdh5
仮想マシンが起動したらログインしましょう。以降の手順はすべて Cent OS 上で実施します。
$ vagrant ssh Welcome to your Vagrant-built virtual machine.
Ansible のインストール (3 分)
残念なことに Ansible は Cent OS の標準リポジトリには含まれていないので、EPEL リポジトリを追加します。
[vagrant@localhost ~]$ sudo rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm (snip) 1:epel-release ########################################### [100%]
詳細を理解していないのですが、このままだと Ansible のインストールに失敗するので baseurl と mirrorlist のコメントを入れ替えます。
[vagrant@localhost ~]$ sudo vi /etc/yum.repos.d/epel.repo [vagrant@localhost ~]$ sudo grep -n fedora /etc/yum.repos.d/epel.repo 3:baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch 4:#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch 12:baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug 13:#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch 21:baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS 22:#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch
Ansible をインストールします。2, 3 分あればインストールできると思います。
[vagrant@localhost ~]$ sudo yum -y install ansible (snip) Installed: ansible.noarch 0:1.8.2-3.el6 Dependency Installed: PyYAML.x86_64 0:3.10-3.1.el6 libyaml.x86_64 0:0.1.3-4.el6_6 python-babel.noarch 0:0.9.4-5.1.el6 python-crypto.x86_64 0:2.0.1-22.el6 python-crypto2.6.x86_64 0:2.6.1-1.el6 python-httplib2.noarch 0:0.7.7-1.el6 python-jinja2.x86_64 0:2.2.1-2.el6_5 python-keyczar.noarch 0:0.71c-1.el6 python-paramiko.noarch 0:1.7.5-2.1.el6 python-pyasn1.noarch 0:0.0.12a-1.el6 python-setuptools.noarch 0:0.6.10-3.el6 python-simplejson.x86_64 0:2.0.9-3.1.el6 Complete!
CDH のインストール (20 分)
いよいよ CDH をインストールします。
と言っても、時間は掛かりますが手順は単純です。まず、ansible-galaxy
コマンドを使って playbook をダウンロードします。2, 3 分かかると思います。
[vagrant@localhost ~]$ sudo ansible-galaxy install garbagetown.cdh5_yarn_pseudo - downloading role 'cdh5_yarn_pseudo', owned by garbagetown - downloading role from https://github.com/garbagetown/cdh5_yarn_pseudo/archive/master.tar.gz - extracting garbagetown.cdh5_yarn_pseudo to /etc/ansible/roles/garbagetown.cdh5_yarn_pseudo - garbagetown.cdh5_yarn_pseudo was installed successfully - adding dependency: williamyeh.oracle-java - downloading role 'oracle-java', owned by williamyeh - downloading role from https://github.com/William-Yeh/ansible-oracle-java/archive/master.tar.gz - extracting williamyeh.oracle-java to /etc/ansible/roles/williamyeh.oracle-java - williamyeh.oracle-java was installed successfully
Ansible Galaxy の依存性解決の機能で Oracle JDK をインストールする playbook も落ちてきているのが分かると思います。便利ですね。
続いて localhost に対してプロビジョニングを行う playbook を書きます。CDH 5 は今のところ Oralce JDK 7 でないと動かないので、変数で指定します。
[vagrant@localhost ~]$ vi main.yml [vagrant@localhost ~]$ cat main.yml - hosts: 127.0.0.1 connection: local roles: - garbagetown.cdh5_yarn_pseudo vars: - java_version: 7
あとはこの playbook を実行するだけです。pycrypto に関する警告が出ますが、ひとまず無視してください。
JDK と CDH5 のインストール、Hadoop 周りのディレクトリ作成に少し時間が掛かりますが、15 分くらいで完了すると思います。
[vagrant@localhost ~]$ ansible-playbook main.yml [WARNING]: The version of gmp you have installed has a known issue regarding timing vulnerabilities when used with pycrypto. If possible, you should update it (i.e. yum update gmp). PLAY [127.0.0.1] ************************************************************** GATHERING FACTS *************************************************************** ok: [127.0.0.1] (snip) TASK: [williamyeh.oracle-java | get JDK 1.7 tarball (as RPM file)] ************ changed: [127.0.0.1] (snip) TASK: [garbagetown.cdh5_yarn_pseudo | Install CDH 5 with YARN on a Single Linux Node in Pseudo-distributed mode] *** changed: [127.0.0.1] (snip) TASK: [garbagetown.cdh5_yarn_pseudo | Create the directories needed for Hadoop processes] *** changed: [127.0.0.1] TASK: [garbagetown.cdh5_yarn_pseudo | Start YARN] ***************************** changed: [127.0.0.1] => (item=hadoop-yarn-resourcemanager) changed: [127.0.0.1] => (item=hadoop-yarn-nodemanager) changed: [127.0.0.1] => (item=hadoop-mapreduce-historyserver) PLAY RECAP ******************************************************************** 127.0.0.1 : ok=17 changed=15 unreachable=0 failed=0
サンプルの実行 (5分)
以上で疑似分散モードの YARN 環境ができたので、Installing CDH 5 with YARN on a Single Linux Node in Pseudo-distributed mode の "Running an example application with YARN" に従ってサンプルアプリケーションを実行してみましょう。
まず、HDFS 上にログインユーザがジョブを実行するためのディレクトリを作って権限を与えます。
[vagrant@localhost ~]$ sudo -u hdfs hadoop fs -mkdir /user/$USER [vagrant@localhost ~]$ sudo -u hdfs hadoop fs -chown $USER /user/$USER
続いて、サンプルアプリケーションで grep するために、ローカルファイルシステムから HDFS 上に適当なファイルをコピーします。ここでは Hadoop の設定ファイルを HDFS 上に put しています。
[vagrant@localhost ~]$ hadoop fs -mkdir input [vagrant@localhost ~]$ hadoop fs -put /etc/hadoop/conf/*.xml input
最後に、環境変数を設定してサンプルアプリケーションを実行します。
[vagrant@localhost ~]$ export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce [vagrant@localhost ~]$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar grep input output23 'dfs[a-z.]+' (snip) 15/02/22 13:51:39 INFO mapreduce.Job: map 0% reduce 0% 15/02/22 13:51:56 INFO mapreduce.Job: map 100% reduce 0% 15/02/22 13:52:18 INFO mapreduce.Job: map 100% reduce 100% 15/02/22 13:52:20 INFO mapreduce.Job: Job job_1424612668205_0002 completed successfully 15/02/22 13:52:20 INFO mapreduce.Job: Counters: 49 (snip) File Output Format Counters Bytes Written=244
MapReduce ジョブが終わってログがずらっと出たら、出力結果を確認します。
[vagrant@localhost ~]$ hadoop fs -ls output23 Found 2 items -rw-r--r-- 1 vagrant supergroup 0 2015-02-22 13:52 output23/_SUCCESS -rw-r--r-- 1 vagrant supergroup 244 2015-02-22 13:52 output23/part-r-00000 [vagrant@localhost ~]$ hadoop fs -cat output23/part-r-00000 1 dfs.safemode.min.datanodes 1 dfs.safemode.extension 1 dfs.replication 1 dfs.namenode.name.dir 1 dfs.namenode.checkpoint.dir 1 dfs.domain.socket.path 1 dfs.datanode.hdfs 1 dfs.datanode.data.dir 1 dfs.client.read.shortcircuit 1 dfs.client.file
HDFS 上にコピーした Hadoop の設定ファイルから、サンプルアプリケーションに渡した正規表現に合致する文字列を grep できていることが分かります。
まとめ
- Cloudera の QuickStart VM は、とても便利だが、一般的なご家庭にあるマシンでは動かすのは厳しい
- Cloudera の Quick Start Guide は、とても丁寧に書かれているが、動作モードや OS ごとに読むべき箇所が異なり、初心者が目的のドキュメントに辿り着くことは困難
- Hadoop を 30 分で試そうと思ったら Ansible にハマって三日くらい掛かったけど気にしない
- Ansible Galaxy の依存性解決は便利
以上です。
Hadoop を 10 分で試そうとしたら 2 時間 49 分かかった話
みなさんビッグデータしてますか?本日は懺悔のブログです。
経緯
世間から遅れること五年、そろそろぼくもビッグデータしたいなと思って Hadoop 周りを調べてみたところ、エコシステムがもりもり成長中で Web 上の情報は新旧入り乱れているわ、書籍の情報はあっという間に古くなるわで、ビッグデータ界の Hello World 的な WordCount を試すのもひと苦労という有様でした。
そんな折、"2014年版 Hadoopを10分で試す(1) | Tech Blog" というブログを発見してキタコレ!と試してみたところ、いろいろあって 結果的に 10 分では試せなかったので、冗談半分で
Hadoopを10分で試すというブログを参考にVMをダウンロードしたら残り2時間49分と表示されたときの顔をしてる
— 箱と矢印と方眼紙 (@garbagetown) 2015, 2月 3
などとツイートしたところ、なんとご本人様に補足され、
トップページのタイトルを少し弄ってみました。全てのページを変えるのは断念w http://t.co/wfC6tKSbCr RT @garbagetown: Hadoopを10分で試すというブログを参考にVMをダウンロードしたら残り2時間49分と表示されたときの顔をしてる
— Tatsuo Kawasαki (@kernel023) 2015, 2月 4
という窒息するほど土下座したい案件となりましたので、本日ここに「ビッグデータ素人がノーガードで突撃した場合、どこにどれくらい時間が掛かるのか」などを紹介することで、懺悔の言葉と代えさせて頂ければと思います。
試した手順と掛かった時間
以下の環境で試しました。
- Windows7 64bit
- メモリ 8GB
- プロキシサーバ有り社内 LAN
- 7-Zip と VirtualBox はインストール済み
ダウンロード
Google Chrome で以下のサイトにアクセスして VirtualBox 版の VM をダウンロードしました。
"Download for VirtualBox" ボタンをクリックすると E メールアドレスやらを求められるので、素直に入力して Submit ボタンを押したところ、いきなり JavaScript エラーが発生。
"geoplugin_city が定義されていない" というエラーのようですが、自宅の Chrome で試してみると再現しないので、なんらかの拡張機能とプロキシサーバの組み合わせがまずいのかもしれません。
そもそも Chrome なんて気取ったブラウザを使っているのが良くないので、安定の Internet Explorer でアクセスしたら無事に VM をダウンロードすることができました。
スクリーンショットを撮り直してみたところ、残り時間 2 時間 52 分でした。他の仕事をしながら気長に待ちましょう。
展開
ダウンロードした VM は 7-Zip で圧縮されているので、展開して中身を取り出します。
7-Zip で開いたらデスクトップなどの適当な場所にコピーしましょう。マシンスペックにもよると思いますが、自分の環境では 15 分くらい掛かりました。
インポートと起動
仮想マシンイメージが取り出せたら、VirtualBox にインポートします。ここでは残り時間 1 分などと表示されますが、実際は 3 分くらい掛かります。
インポートが完了したら、いよいよ VM を起動します。5 分くらい掛かります。
プロキシの設定とサンプルアプリケーションの準備
VM が起動すると Firefox が立ち上がるのですが、なんだか画面が変です。
プロキシサーバが設定されていないので画像などが取得できていません。機能的な影響はありませんが、モチベーションに影響するのでプロキシサーバを設定しましょう。
なお、quickstart.cloudera は localhost を見るのでプロキシ対象外に指定する必要があります。
プロキシの設定が完了したら、ブックマークバーから Hue を選んで cloudera/cloudera でログインします。
Hue にログインしたら、"2014年版 Hadoopを10分で試す(1) | Tech Blog" を参考に Hue のインストールウィザードを進めてサンプルアプリケーションをインストールします。10 分くらいあればインストールできると思います。
サンプルアプリケーションの実行
いよいよ Hadoop を試します。Hive クエリを実行してみましょう。
Hive クエリが MapReduce ジョブに変換される様子がログに出力され、処理が完了すると自動的に結果画面が表示されます。
エンジニア的にはおおおスゲーと素直に喜べますが、ふだん見慣れている SQL に似た Hive クエリだけに、えらいひとには Hadoop の威力よりも MapReduce の遅さの方が目立ってしまうんじゃないかなあと余計なことも思いました。
Hive と比べると Impala はすごく速いです。他にも Sqoop や Pig などのサンプルもあって遊ぶには持ってこいですが、お仕事で使う場合はこれらツールの特色をきちんと理解して、冗長化などにも気を付けながら採用を検討する必要があり、それなりに敷居は高いと感じました。
その頃タスクマネージャは
いっぱいいっぱいでした。
まとめ
- Hadoop 周辺は進化の速度が速く、Web や書籍の情報をもとに検証環境を構築することがむずかしい
- CDH QuickStart VM を使えば、仮想マシン起動開始から 10 分で CDH に含まれるいろいろなツールを試すことができる
- ただし仮想マシンを起動するまでに 3 時間以上かかる
- あとメモリめっちゃ食う
あれこれ悩みながらの手作業だと 3 時間どころか 3 日掛かっても環境を作れないので、取っ掛かりとして QuickStart VM を試すのは良いと思います。
ただし、仮想マシンの使用メモリが 4 GB に設定されているので、メモリを 8 GB 以上搭載しているマシンでないと厳しいです。
OS やメーラ、ブラウザ、IDE などを立ち上げて開発することを考えると 8 GB マシンでも際どいので、現在は VM を Hadoop 専用端末にインストールして VirtualBox のブリッジアダプタで社内 LAN に繋いでいます。この辺りの手順も気が向いたら書くかもしれません。
それではみなさん良いビッグデータを。
ドキュメント翻訳の裏側
この記事は Play framework Advent Calendar 2014 - Adventar の四日目です。空いているようなので埋めます。
五日目の立候補者がいないので誰か書いてください。
新規翻訳と差分翻訳
Play Framework のドキュメントは日々更新され続けています。いずれは原文の更新を検知して、すぐさま翻訳する仕組みを作れたらと思いますが、今のところ翻訳プロジェクトでは Play Framework の新しいバージョンがリリースされるたびに、手作業で地道に更新内容を確認しています。
更新内容には大きく分けて、ドキュメントの追加、更新、削除の三種類があり、削除されたドキュメントはもちろん翻訳対象外ですし、追加されたドキュメントは何も考えずに翻訳すればいいのですが、難しいのが更新されたドキュメントです。
原文に変更がない箇所まで再度翻訳するのは無駄なので、翻訳プロジェクトでは以下のように対策しています。
issues のラベルと diff 表示
前回の記事 で、しれっと「ファイル名などで issues を検索します」と書いたとおり、翻訳プロジェクトでは翻訳対象のドキュメントを issues に登録しています。
このとき、更新されたドキュメントの場合は、以下のように update
ラベルを付けて、issues の本文に diff の結果を貼り付けています。
リリースごとに大体 120 個くらいの issues を登録するので、さすがに手作業では厳しく、issues を登録するツール を作って対応しています。
翻訳対象のドキュメントを issues 化するというアイディアは @masahito さんのもので、当時は Pyhton で書かれていたようです。diff を含める機能を追加したかったのですが、ぼくが Python を書けないので Java で作り直しました。
これにより、このドキュメントが更新されたものであることと、更新された内容がひと目で分かるようになりましたが、差分が多くて面倒くさそうな issues がいつまで経っても翻訳されないという副作用も産み出しています。
なお、GitHub API クライアントには Jenkins 作者でもある @kohsukekawa さんの kohsuke/github-api を使わせて頂きました。
翻訳文のコピー
続いて、変更がなかった箇所の対策です。
上記した通り、再度翻訳するのは無駄なので、以前は手作業でコピーしていたのですが、@seratch_ja さんに「これ苦行ですね」と言われたので、翻訳文をコピーするツール を作りました。
@seratch_ja さんには Scala で書くと言ったのですが、ぼくが Scala でツールを書けるようになるまでの間に Play Framework 5 くらいになってしまいそうだったので、Java で書いています。
それから、少しくらい間違っていてもすぐに直せばいいじゃない、という間違ったアジャイル開発信者のような大らかな気持ちで作ったので、ひとつのドキュメント内に同じ文章が複数回登場するとコメントアウトが壊れたりと、微笑ましい動作をします。直します。
まとめ
本家サイトで公開されている翻訳プロジェクトなどと聞くと敷居が高く感じられるかもしれませんが、実際は手作業による温もり感溢れるプロジェクトであることがお分かり頂けたのではないでしょうか。
本来は Google Translation Toolkit などを使うべきだったのですが、過去の経緯 (主に無知) などにより、上記した方法で何とか運用しています。
運用改善にご協力頂いた @masahito さん、@seratch_ja さん、それから紹介が遅れましたが 翻訳ガイドライン を書くように薦めてくださった @kawachi さん、そして GitHub API クライアントを OSS で公開してくださっている @kohsukekawa さんに、この場を借りて改めてお礼を申し上げます。
本当にありがとうございます。今後ともよろしくお願いいたします。以上です。
ドキュメント翻訳の手順
この記事は Play framework Advent Calendar 2014 - Adventar の三日目です。
四日目の立候補者がいないので誰か書いてください。
おまえ誰
2010 年 4 月から Play Framework のドキュメントを翻訳しています。
以前は http://www.playframework-ja.org/ に Play 1.2 で書いたアプリをデプロイして翻訳ドキュメントを公開していましたが、現在は https://www.playframework.com/documentation/ja/ で公開しています。
が、まったく手が足りていないので、この場を借りてドキュメント翻訳の具体的な手順を紹介することで、ひとりでも多くの人に手伝ってもらえたらいいなと思っています。
概要
Play Framework 2.x のドキュメントは Markdown 記法 で書かれており、 GitHub で管理されています。
翻訳版も GitHub で管理しており、こちらの例 のように、原文をコメントアウトして翻訳文を併記しています。
ちなみに Play Framework 1.x のドキュメントは textile 記法 で書かれていますが、こちらはコメントアウトができないので、こちらの例 のように翻訳文だけ書いていました。
playframework.com は翻訳版の GitHub リポジトリを定期的にポーリングしていて、翻訳版リポジトリに取り込まれた内容は、すぐに playframework.com に反映されます。
ドキュメント翻訳の手順
おおまかな手順は 翻訳ガイドライン に書いてあるので、まずはこちらを参照してください。
以下、もっとも簡単なパターンの手順を紹介します。
例えば 2.3.x/JavaActionsComposition に未翻訳箇所を発見したとします。
ページフッタにあるドキュメントソースへのリンクをクリックします。
GitHub のページが開くので、ログインします。
翻訳する前に他の誰かが作業着手していないことを確認してください。ファイル名などで issues を検索します。
コメント欄に作業着手する旨が書かれていなければ、自分が作業する旨をコメントしてください。内容はなんでも構いません。
いよいよ翻訳します。ここでは GitHub 上のエディタで作業します。ドキュメントソースのページに戻り、編集ボタンをクリックします。
編集が完了したら、コミットコメントに issues の番号を入力して Propose file change
ボタンをクリックします。
自動的にリポジトリが fork され、Pull Request の作成画面が表示されるので、Create pull request
ボタンをクリックします。基本的な作業はこれで終わりです。
最後に、playframwork-ja グループのメンバーが Pull Request の内容をレビューし、問題なければマージします。
マージが完了したら、10 分以内に playframework.com に変更が反映されます。
まとめ
ちょっとした翻訳や修正の場合、GitHub のアカウントさえあれば、どなたでも簡単にご協力頂けることがお分かり頂けましたでしょうか。
Play Framework 2.3.x の翻訳は、まだまだ issues が残って います。どうぞお気軽にご協力ください。
あと、四日目のアドベントカレンダーを誰か書いてください。以上です。