プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

SphinxCon JP 2017 に参加してきた #sphinxjp

自分がIT系の勉強会へ定期的に参加するようになったきっかけの一つであるSphinxのイベントがあったので参加してきました。

https://sphinxjp.connpass.com/event/71056/

おしゃれな会場の様子が分かるツイート。

以下、今回のイベントの発表目次です。

  1. cocoatomo 「Sphinxが支える翻訳ドキュメント」
  2. 鹿野桂一郎 「Sphinxで売り物の書籍を作ってみた」
  3. r_rudi 「Re:VIEWとSphinxと、時々、ボク」
  4. Iosif Takakura 「社内のマニュアルをSphinxで作ってみた」
  5. 渋川よしき 「HTMLテンプレート再構築案」

イベントが始まるときの会場説明の際の様子はこんな感じでした。

Untitled

イベント途中で提供されていたケータリングの様子。

Untitled

ケータリングに群がる人々。

Untitled

以下、メインコンテンツである発表の様子を写真とともに軽く感想を交えて書き残します。

Sphinxが支える翻訳ドキュメント」 @cocoatomo

Untitled

普段、「ちょびよみ」というこじんまりとした勉強会でお世話になっている @cocoatomoさんの発表でした。

発表内容のメインは「翻訳ドキュメントができるまで」とのことで、想定読者はSphinxを使っている人と翻訳プロジェクトの管理に興味がある人で話をされていました。

これが発表で使われたスライドです。

Pythonドキュメントの翻訳率は2017/11/27時点で日本語が圧倒的の92.73%!

PEP545により、日本語版とフランス語版が docs.python.orgのドメイン配下に置かれるようになったとのことで、素晴らしいですね。

翻訳プロジェクトの始め方

始めるに当たって考えること

  • 原文と訳文は1対1か? 脚注、訳注の追加や文章の順序を入れ替えをしたいか?
    • YesならSphinxはやめておいたほうがいいだろうとのこと
  • 翻訳作業は一度きりか継続的に行うか?
  • 翻訳プロジェクトを管理する上で困難な点は何か?
  • 困難な点をフォローするために、どのツールやサービスを使って、どんな運用をしていくのか

当たり前の話だろうけど、単発型よりも継続型の方が管理・運用が大変とのこと。

翻訳作業の困難さ

  • 原文の管理
    • 更新の取り込み
  • 訳文の管理
    • 原文と訳文の対応つけ
    • 複数人作業による翻訳作業の衝突回避
  • 翻訳
    • 訳語の統一
    • 表現の統一(特に複数人作業)

発表中、一時的にディスプレイとPCの接続がおかしくなったりする、あるあるなトラブルが発生したりしました。

普段から翻訳に対する思いをTwitterやSlackや或いは直接お話しして伺っていたのですが、改めて翻訳に対する熱い思いをお持ちなのだなと感じました。

Sphinxで売り物の書籍を作ってみた」 鹿野桂一郎 (@golden_lucky)

敏腕編集者の鹿野さんによる発表。怪我をされたらしくて松葉杖で歩いていて、発表時は座って喋っていたので下の写真には写っていません。

Untitled

発表に使われたスライドは以下の通りです。

『Goならわかるシステムプログラミング』ではSphinxのmake latexpdfでPDFを生成してはいないとのこと。

正直TeXは全く分からないに等しい知識レベルだったため、発表内容で披露された数々の努力がどれくらい大変なことだったのかは想像でしか分からないですが、売り物の書籍を作るのはやはり大変なことなんだなあというのが感じたことです。

話しを聞く限り、これはTeXに習熟した鹿野さんだからこそ可能になったハックだなあと思いました。話している内容が完全に技術寄りなので、技術者が編集者をしているという評はその通りだと思いました*1

完全に「鹿野専用Sphinx」という趣なくらいの追加・改造をしているようで、何かロボットアニメを見ているような気分になりました。

「生TeX埋め込みのロールを早く作っておけばよかった」という話が面白かったですね。

まとめ: 「Sphinxで困ったら日本語でツイートすればいい」

鹿野さんからの一言を引用。

「Re:VIEWとSphinxと、時々、ボク」 @r_rudi

Untitled

スライドはこちらです。

Re:VIEWとSphinxと、時々、ボク — SphinxCon 2017 1 ドキュメント

タイトルからも分かるようにRe:VIEWとSphinxの話が主でした。全体的にRe:VIEWとreSTの特徴や変換についての話が多かったのですが、reST->Re:VIEWの変換をするSphinx拡張を書いていただけではなく、Re:VIEWの方にreSTへ変換する機能をPRで出してmergeされていたという話しを聞いてびっくりすると同時にすごいなって思いました。

SphinxCon 2017が終わった後、@r_rudiさんを含めた有志で軽く飲み会みたいなものが開かれていたのでそれにお邪魔して色々楽しい話が出来たのもよかったですね。

「社内のマニュアルをSphinxで作ってみた」 Iosif Takakura(@huideyeren)

Untitled

発表に使われたスライドはこちらです。

Excel方眼紙が大嫌いです!」ということを言ったら会場から拍手が出たのが面白かったですね。

技術よりも現実世界と戦う機会の多い人は彼の発表スライドを読んでみると共感することが多々あると思います。

実は発表者のTakakuraさんは前職の同僚で、同じプロジェクトをいくつか手がけたりしていたので、彼の発表の裏にある背景とかを知っている関係もあり、「ああ、やっぱり大変そうだなぁ…」と共感することばかりでした。

以下、発表を聞いているときの私の感想です。

「HTMLテンプレート再構築案」 渋川よしき(@shibu_jp)

Untitled

発表に使われたスライドはこちらです。

HTML Template Proposal for Sphinx 2.x — HTML Template proposal for Sphinx 2.x 2017.11.23 documentation

前の発表者のTakakuraさんの発表内容を受けて、「make singlehtmlでwordやmediumに貼り付けると綺麗な形のまま形式を変換できるので、引き継ぎの形の一つとしておすすめ」という小話があり、かなり有用な知識が得られましたね。

渋川さんの話はデベロッパーやメンテナ向けの話とのことで、epub3ビルダーの走りをSphinxにプルリクした身としてはかなりためになる話でよかったです。

話の内容を箇条書きにすると以下のような感じ。

  • HTMLテンプレートの依存の多さ・複雑さにより、自作のテンプレートを差し替えるのが難しくなっているので簡素化したい
  • 検索機能の強化をしたい
  • OGP(Open Graph Protocol)の強化
  • Offlineモード
  • パフォーマンス改善
    • Prefetch
    • AMP

今回の発表とは直接関係ないですが、私がプルリクでSphinxに追加した拙いepub3ビルダーを渋川さん*2がガシガシ作り直してくれたおかげで、昔とは比べものにならないほどvalidなepub3が生成できるようになったので感謝すると同時に、その辺りの作業を外から眺めていたこともあって、HTMLテンプレートの話とかは興味深く聞かせてもらいました。

r_rudiさんの項目でも触れた有志の飲み会に渋川さんも参加していて色々お話しできたのも楽しかったですね。

LT: 木星人はnbsphinx使ってみよう by driller/どりらん

Untitled

nbsphinxいいよ!という話しでした。

…すいません、集中力が切れていて、あまりちゃんと話を聞けてなかったです。

今発表スライドを見たらnbsphinx良さそうですねという感想です。最近Jupyter notebookを使うことが増えてきたので活用したいと思いました。

以下終了後の余談。

LT: Sphinx-users.jp というコミュニティの紹介 by @usaturn

今回のSphinxCon 2017の開催のとりまとめをしていたusaturnさんによるSphinx-users.jpの紹介。

Sphinx-users.jpが普段どういう活動をしているかを紹介して、来場者の人だけに『Sphinxをはじめよう 第2版』を安く購入できるクーポンコードを提示していたりしました。

多分発表スライドが公開されていない(はず)理由はこのクーポンコードがスライドに含まれていたからだと思います。

忙しい中、会場調整だったり各種とりまとめをしていたはずなのでお疲れさまでしたと伝えたいです。

まとめ

理由は分からないですが、何故か久し振りに参加して楽しく過ごせて「かつ」翌日体調的にそれほどダメージを受けなかったのでとてもよかったです。

あとそれほど日をまたがずに参加ブログ記事をアップできてよかったですね!

*1:世の中に存在する編集者の中で自分の編集作業用にHaskellでソフトを書ける人、そうそういないと思います

*2:アクティブなメンテナの小宮さんも結構改良に参加されていたはず

『プロフェッショナルSSL/TLS』は業務で即役に立った良い本でした

言いたいことはタイトルに書いたのですが、「『プロフェッショナルSSL/TLS』、良い本です」というのが結論の書評です。

『プロフェッショナルSSL/TLS』 – 技術書出版と販売のラムダノート

『プロフェッショナルSSL/TLS』に関しては前回のブログ記事で以下のように軽く触れていました。

業務でSSL証明書周りの作業をしていて、今まで穴だらけだったSSL/TLSの知識がむっちゃ足を引っ張っている現状だったので、以下の書籍を買いました。

最近こんなことを勉強してます - プログラマ行進曲第二章

まだ1/4も読めていないですが、それでも十分仕事に活かせているので原著の作者と翻訳者とラムダノートさんありがとう、という気持ちです。 前職でSSL証明書を取得する必要があったときにネットのリソースだけでSSL/TLS周りを勉強しましたが、知りたいことを探していても古かったりして本当に正しいのか逐一調べながらやっていたのに対して学べなかった経験からすると、SSL/TLSの勉強をしたかったらさっさとこの本を買って勉強した方が時間の節約になっていいと思いますね。

最近こんなことを勉強してます - プログラマ行進曲第二章

引用で触れている業務*1が終了したので、上記の引用のように軽く感想を書いて終わりにするのではなく、一回振り返って書評をブログ記事にしてまとめた方が今後の自分のためにもいいかなと思って今書いています。

本の内容の真っ当な書評としては他の方がもっと詳細に書いているので、そちらを見た方がいいでしょう。

【書籍】プロフェッショナルSSL/TLS:Geekなぺーじ

jovi0608.hatenablog.com

私の書評はどちらかというとユースケースに相当するもので、「こういう問題があって困ったので買って、無事に問題を解決しました」という風に読んでもらうといいのではないかと思います。

あと、書評とは書いていますが、まだ私はこの書籍を全て読んだわけではなく、業務に関連して参照した部分+αくらいしか読んでないことも記載しておきます。

何を必要として『プロフェッショナルSSL/TLS』を買ったのか?

上でも引用したように、業務でSSL証明書を扱う必要のある作業を担当することになり、元々のSSL/TLSの知識があやふやな状態でやっていたら仕事が進まなかったのでそれを解消するために買いました。

担当した業務についてもう少し具体的に書くと、Apache Kafkaを利用したプロダクトがあるのですが、KafkaがSSLを利用*2している箇所があり、そこに必要な証明書の設定をgradleでしていたのをopensslにしてシンプルにするという業務でした。

ここで問題になったのが、何回も述べているように、私の元々のSSL/TLS知識があやふやなことでした。

今回担当した業務では「既存の設定のフローをシンプルにする」というものでしたが、この既存の設定の仕組みが割と複雑で、まずそこを理解してシンプルにするところで難儀していたのに加え、SSL/TLS関連の知識があやふやだったせいで「そもそもどの設定を変更すればいいのか、あるいはいけないのか」ということが分からず、既存の設定のフローをシンプルにする前の段階で詰まることが業務初日に多発していました。

ここで「まずい、このまま行くと何も進捗が出ずに何日も経ってしまいそうだ」と思ったことと、元から「いつか買おう」と思っていたことが重なり、『プロフェッショナルSSL/TLS』をラムダノートさんのサイトに行って即購入したという流れになります。

『プロフェッショナルSSL/TLS』のどのあたりが役に立ったのか?

個人的にこの『プロフェッショナルSSL/TLS』という書籍が素晴らしいと思う点の一つは、「そもそも証明書とは何か、使用されているプロトコルは何か、それらがどういう風に使われているのかといった、SSL/TLS関連の全体的な知識」と「opensslコマンドを使ってCSRを生成するといった、より実装や具体的な作業に近づいた知識」の両方がちゃんとした分量でまとめられていて、自分の求めている情報がどちらの種類であっても引き出しやすくなるように章立てられていることです。

私みたいにSSL/TLSの知識があやふやな人がインターネット上のリソースだけでSSL/TLSに関することを調べようとすると、以下のような問題にぶち当たると思います。

  • 自分が分からなくなっている問題がSSL/TLSの全体的な知識を要求するものなのか、それとももっと実装に寄った具体的な知識なのかが判別付かない
    • 判別が就かない位なので、ネット上のリソースの正しさが判断できない
  • SSL/TLSに関して自分が抱える問題を解決してくれる情報が各サイトに散らばっていて、かき集めるだけでも一苦労

実際、私は前職でサイトのHTTPS化をする際に(余力がなかったので)ネット上だけでSSL証明書に関する事項を調べましたが、上記の問題に結構ぶち当たって時間を使ってしまった記憶があります。

それに比べると、この『プロフェッショナルSSL/TLS』は一冊手元にあるだけで疑問に思った点をすぐに調べることが出来、調べた点に関連しそうな情報も書籍内のみで少なくとも概要は知ることが出来るようになっていて助かりました。

私の業務の場合で言うと、既存の設定フローで証明書にAuthority Information Accessの情報を追加しているところがあったのですが、そもそも証明書のフィールド自体の知識がなかったので、「3.3.1 証明書のフィールド」と「3.3.2 証明書の拡張」のセクションで書かれている知識が非常に役立ちました。

加えて、実際に設定フローを変更する際、CAを立てて自分の望む設定で証明書を発行したり署名する際に必要なopensslの具体的なコマンドや設定ファイルの書き方などについては、「11.2 鍵と証明書の管理」と「11.4 プライベートCAを作る」に記載されていることをそのまま活用できました*3

私は今回使いませんでしたが、ApacheやNginxで設定する場合などの章もある*4ので、そういう知識が必要な業務でも十分役に立つと思います。

まとめ

最初にも書いたとおり、「『プロフェッショナルSSL/TLS』、良い本です」というのが感想です。

私みたいに「SSL/TLSの知識があやふやなのに業務で急に必要になった!」という人は、ネット上のリソースだけで消耗しそうになったら、「この本の購入を検討した方が結果的に安上がりになるかも」ということを頭の片隅にでも置いておくといいでしょうね。

安くはない書籍なので、会社のお金を使って購入するのもいいと思います。

*1:といってもチケット単位のそれほど大きくないものでしたが

*2:公式ドキュメントだとこのあたりの話です

*3:opensslのコマンドに関しては多少知りたいことが書かれてなかったのでmanコマンドによるヘルプと他サイトに記載された情報でカバーしています。

*4:これらの設定に関してはIPAが発行している「SSL/TLS暗号設定ガイドライン」で足りる場合も多いかと思いますが。

最近こんなことを勉強してます

一昨年は1月ごとにやったことをまとめた記事を9月くらいまではやっていたんですが、もう今年は見る影もないので不甲斐ないですね。

前回から進捗があったわけではないのですが、何かしら理由をつけてアウトプットしないと知識の活用の巡り的によろしくなくなってきているので無理矢理ひねり出します。

前回の記事はこんなところです。

takuan-osho.hatenablog.com

takuan-osho.hatenablog.com

仕事の関係で学んでいること

Kafka(の触り)

前回Kafkaについて触れたときにも少し書きましたが、仕事の関係でKafkaを使う機会が増えてきていて、少なくともアーキテクチャの理解と軽い使い方くらいはおさえておかないと意味不明になってしまうので、引き続き勉強しています。

とはいっても、プライベートの時間で学ぶのは中々キツい題材なので、仕事を通して学んでいる最中です。

一番の学習リソースは会社のプロダクトと"Kafka: The Definitive Guide"です。特に後者は全体像から実際の使い方まで説明してくれているので重宝しています。

とはいってもまだ最初の方しか読んでないんですけどね。

SSL/TLSの基本から真っ当なことまで

業務でSSL証明書周りの作業をしていて、今まで穴だらけだったSSL/TLSの知識がむっちゃ足を引っ張っている現状だったので、以下の書籍を買いました。

プロフェッショナルSSL/TLS(紙書籍+電子書籍)www.lambdanote.com

前から欲しかった本なので買うきっかけができてよかったと思います。

まだ1/4も読めていないですが、それでも十分仕事に活かせているので原著の作者と翻訳者とラムダノートさんありがとう、という気持ちです。

前職でSSL証明書を取得する必要があったときにネットのリソースだけでSSL/TLS周りを勉強しましたが、知りたいことを探していても古かったりして本当に正しいのか逐一調べながらやっていたのに対して学べなかった経験からすると、SSL/TLSの勉強をしたかったらさっさとこの本を買って勉強した方が時間の節約になっていいと思いますね。

Elasticsearch / Kibana

これは学んでいるというよりかは学びたいこと。ちょうどいい書籍が出たみたいなので買って勉強したいですね。

データ分析基盤構築入門[Fluentd、Elasticsearch、Kibanaによるログ収集と可視化]

データ分析基盤構築入門[Fluentd、Elasticsearch、Kibanaによるログ収集と可視化]

プライベートで適当に学んでいること

OCaml

"Real World OCaml"を使って勉強しています。実務に使うというよりかは関数型言語を学んで教養をつけるという意味合いで。

Real World OCaml

Real World OCaml

現在は5章のField Punningまで行きました。全23章なのでまだまだですね。

ただ、勉強していく中でかなり気に入ってきているので、何かしら簡単なコマンドラインツールを一回OCamlで作ってみたいですね。それを皮切りにして何かやってみたい気持ちもあります。

今からOCamlに興味を持った方、書籍をやるのもいいですが、第2版のページが(まだ途中とはいえ)できているので、そちらを使って勉強してみるといいと思います。

Real World OCaml

(Linuxの)基礎

完全に止まっていた『詳解システムパフォーマンス』の読書を再開しました。

詳解 システム・パフォーマンス

詳解 システム・パフォーマンス

とはいっても、微々たる進捗でしか進んでいないのでいつになったら終わることやら…

この書籍は基礎力が付くと思うのですが、即効で効果を発揮するタイプの書籍ではないと思うので、効果が早めに出そうな以下の書籍も最近買って読んでいます。

標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド

標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド

業務で相手にするOSがCentOSなことと、そろそろsystemdとか押さえておきたいことと、そもそもLinuxのことで知らないことがたくさんあるので、本屋でCentOS 7を対象にした本を吟味して、一番よさそうなこれを選べました。『詳解システムパフォーマンス』に負けず劣らずな厚さと重さで大変です。

あとディープラーニングとか機械学習も勉強しているといえばしてるのですが、色々詰まったりできていないことが多いので、別の機会にまとめて記事にしたいです。

以上。

PyCon JP 2017に参加してきました (1日目) #pyconjp

前回の記事で書いたチュートリアルに引き続き、PyCon JP 2017のカンファレンス本体(1日目)に参加してきました。前回の記事はこちら。

takuan-osho.hatenablog.com

PyCon JP 2017のサイトはこちら。

pycon.jp

いつものパターンだと記事の内容をしっかりしようとし過ぎて時間かけすぎて結局アップしないまま終わってしまうので、後で随時内容を更新できるようにして、取りあえず記事をアップするところからやってみるつもり。

聞いたセッション

キーノート


201_101_Opening〜Keynote Peter Wang

初日のキーノートはPeter Wangさんによるもの。Anacondaで有名なContinuum Analyticsの共同設立者でCTOの方だそうです。

観測範囲によるバイアスが強いだけなのかもしれませんが、Anacondaを導入することで却って環境構築周りでトラブルを抱えるケースをたびたび見かけることがあったのと、以下の記事で山口さんが触れているようなPythonのパッケージ管理ツール周りの話を事前に知っていたこともあり、何かパッケージング周りで言及があるかなー?なんて思いながら聞いていました*1

ymotongpoo.hatenablog.com

そんなことを考えていたけれど、下手をしたら喧嘩を売ってしまうようにしか聞こえない感じでしか質問できない英語力なのでどうしたものかなー、誰か聞いてくれないかなーなんて思っていたら、そんな質問をドンピシャでしてくれた人がいました。「質問した人、誰だろう?」と思っていたら、後でTwitterのタイムラインを見たところ、その質問をしたのは@chezouさんでした。

medium.com

以前からためになるブログ記事を書いていたり、時々Twitter上でやり取りさせてもらったことがあったのでchezouさんのことは知っていたのですが、現実世界で会うことは今までなかったので「あの人がchezouさんだったのか!」と一人心の中で驚いていました。

詳しくは全体の感想を書く時に触れたいのですが、1日目終わりの懇親会でchezouさんにリアルでご挨拶できて楽しかったです。

Industrial Test Automation with Asyncio


201_102_Industrial Test Automation with Asyncio_Justus Perlwitz

  • 英語は聞きやすいタイプの人だったはずなのに上手く聞き取れなかったのが心残り
  • 話してたのはAsyncioの基本的なところで終わっていたので、もう少し応用的なことを聞きたかった自分としては物足りないところもあった
  • ボトルネックとなっているところがネットワーク由来かCPU由来かといった話は基本的ながらも普段自分がちゃんと意識できているとは言い難いところなので、復習したい

今(2017/09/21現在)、参加当時のことをメモを見ながらYouTubeを見返しながら気づいたけれど、話者が英語の場合、公式に字幕がなくてもYouTubeの自動生成字幕でかなりの部分がカバーできているっぽいので、今後英語のセッションでもYouTubeにアップされているなら見返そうかなという気分になりました。

after VOEZ launch: how to resolve problems of mobile game server development and service maintenance


201_104_after VOEZ launch: how to resolve problems of mobile game server …_郭 学聡 (Hsueh-Tsung Kuo)

  • 本格的なゲーム開発したことはなかったので本当の難しさを実感できるわけではなかったですが、「キャッシュを友好的に使う」など、真っ当な話が多くてよかったですね
  • 発表の最初の方で登壇者が関わったギャルゲ(?)のティーザー流してたのが印象的でした

len()関数がオブジェクトの長さを手にいれる仕組み


203_104_len()関数がオブジェクトの長さを手にいれる仕組み_Takayuki Shimizukawa

  • 凄く勉強になりました(小学生的な感想)
  • ただ、これはlv1ではないのでは…
  • この __len__ とか __call__ とか、結構長くPython使っているのにまだ押さえ切れてないのでちゃんとどこかで知識を埋めておかないとなあ…なんて思いながら聞いてました。

Secrets of a WSGI master


201_108_Secrets of a WSGI master._Graham Dumpleton

  • 参加していたときは壊滅的に英語が聞き取れなくて死んでました。リスニング力高めたい…
  • YouTubeには自動生成字幕機能があることを再認識したので、字幕使いながら後で見直したいですね

感じたこと

  • 帰宅した段階で各セッションの録画を見られるのはやはり正義
    • PythonでOAuth『サーバ』を構築した話」と「Python機械学習によるWebセキュリティの自動化」、それぞれ聞きたかったのに他の聞きたい奴と被ってしまって聞けなかったので、後で見られる録画があるのは本当にありがたい
  • とはいえ、せっかく参加しているのだから何か登壇者に質問しておけば良かったと思った
  • 一応頑張って英語のセッションを中心に聴講しに行きましたが、リスニング力低くて理解できない部分が多くて自分のふがいなさを感じる
  • 外で休憩しているときにPythonに限らない話(放送大学Apache Kafkaの運用、OCamlの学習、英語の技術書は斜め読みできなくてツラいといったことなど)について雑談できて楽しかった

明日もボチボチ楽しく参加します。

*1:リスニング力低いので同時通訳の力万歳!と思いながら聞いてました

#pyconjp 2017のチュートリアル『Chainerで学ぶディープラーニング入門』に参加してきた

タイトルの通りですが、2017/09/07に開かれたPyCon JP 2017のチュートリアルに参加してきました。

参加したチュートリアルChainerで学ぶディープラーニング入門です。写真を撮っていい場所とかタイミングを見失ったので、環境構築について書いてあったホワイトボードをチュートリアルが終わった後に撮った一枚です。

IMG_0834

参加した感想としては、「既知のこともそれなりにあったけど、Chainer等を使って実務に活用しようとする時にポイントとなる所などを学べたりしたので、参加してみて良かった」というところですね。実際にChainerのコードをいじるよりも、データセットを適切な形にしてChainerに渡すところに時間を使うようになるということを少しでも体験できたので、今後何かChainerで何かやろうとしたときに役立てられそうだと思いました。

後、以前『ゼロから作るDeep Learning』を一通り読み通していたので、内容的に置いてけぼりをくらうこともなかったのが良かったんだと思います。

時間的制約や難易度調整の問題で数学成分が少なくなる(=細かいところの説明は省かれる)のはしょうがないですが、休み含めて8時間でやっていたことを考えると基本的なことから始めた割には密度が濃い内容で満足しました。

あと、個人的に非常に印象に残っていてためになったなあと思ったのは、講師の方の分かりやすい説明&口調でした。本業の方で有料のハンズオンセミナーを担当されているだけあって、分かりやすい構成の説明というだけでなく、喋り方も聞き取りやすいように意識してされているのか、自分も何かの機会に発表する時には参考にしたい喋り方でした。

最初見たときは満員で参加する気も無かったのですが、参加人数増員の知らせをたまたま見た後急に参加したくなって参加したチュートリアルでしたが、満足度高く参加できて良かったです。

…本当はコードも含めたもっと具体的なことを書きたいなと思いつつ、まだ理解が足りないので今後の記事で何かしら今回学んだことを活かしたアウトプットができればいいなあ、なんて感じです。

AWSのELBを利用した際のProxy Protocolサポートについて調べたことをまとめる

最近仕事でELBとその後段にあるnginxに対してProxy Protocolなるものの設定をする必要があって色々調べたので、せっかくだから自分のブログに備忘録として記録を残すことにします。自分が携わっている業務固有の情報が特にあるわけでもないので。

何故この対応をする必要が出てきたか?

諸事情で以下のブログ記事と同じくTCP(443)でロードバランシングをしているELBでリクエストを最初に受け取っている環境があり、この環境下ではELB配下にあるnginxのアクセスログにリクエストの送信元IPアドレスが記録されていないことが判明して不便だったので、それの対処をする必要が出てきたからです。

blog.livedoor.jp

送信元IPアドレスが記録されていなかった原因と対処法

上記ブログ記事と同じ内容になってしまうのですが、原因を挙げると以下のようになります。

  • AWSのELBはHTTP/HTTPSでロードバランシングする時はX-Forwarded-Forヘッダがサポートされるが、TCPロードバランシングする時はX-Forwarded-Forヘッダはサポートされないので、そのままだと送信元IPアドレスを伝えなくなってしまっていたから
  • この場合、AWSのELBと後段のnginxでProxy Protocolの設定を有効にする必要があり、どちらもその設定を有効化していなかったため

要はELB, nginxともにProxy Protocolの設定を有効にすれば解決、ということですね。ここに辿り着くまでに結構時間がかかってしまったので反省。

Proxy Protocolをサポートするのに具体的に必要なこと

ぶっちゃけ以下の記事を読んで設定を変更すれば問題ないはずです。実際私も以下のドキュメントと記事を読んで設定しました。

docs.aws.amazon.com

developer.hatenastaff.com

www.nginx.com

一つ付け加えられるとしたら、上記の記事のELBの設定変更ではawscliを使っているのですが、terraformでELBの設定を管理している場合は aws_proxy_protocol_policy のresourceを設定することで可能になる、というところでしょうか。

www.terraform.io

後は各自の環境で必要な作業をして設定を変更してあげれば目的は達成できるはずです。

もうちょっとまともにコード書いてまとめようかと思ったのですが、時間かかっていつまでも記事をアップできなくなりそうなので、こんな感じで締めたいと思います。

Apache Kafkaの触りだけ勉強してみた

仕事の関係でApache Kafkaを扱えるようになる必要がだんだん出てきたので、これを機会にしてKafkaについて学び始めました。実際私がどれだけKafkaの運用をすることになるかは分からないんですけどね。

以下、適当に調べたことを適当に書き散らして記録を残します。主に書くことによる備忘録。

そもそもApache Kafkaって何?

一言で言うと「とにかく凄いキュー」と理解。公式サイト曰く、"Apache Kafka™ is a distributed streaming platform"とのことで、キューとしてだけ使われているのではないのですが、取りあえずの理解としてはそんなに間違っていないはず。

元々LinkedInで開発されて、その後Apacheに寄贈されて今も活発に開発が続けられているようです。

大量のデータを(リアルタイムに近い形で)扱う必要のある企業がよく使っているようです。

概念とか構成とか

いきなり公式サイトに行っても意味不明だと思ったので、一旦以下のような記事を読んだり手を動かしてみて、だいたいの概念を掴んだ後に公式サイトを見ました。

これらを見た後、公式サイトのQuickstartをやってみて何となく理解。

今までキューとかpub/subシステムを扱ったことがなかったので、Producer, Broker, Consumerと言われても何のことだか分からなかったのですが、上記ステップを踏む中で一応の理解は得ました。

Kafkaの構成としては中心にBrokerというやつがいて、そこがhubになってデータをやり取りしていて、Kafkaにデータを送りたいときはProducerを介してデータを送り、Kafkaからデータを取り出したいときはConsumerを介してデータを取得するという感じみたいです。

Kafka側で一旦データを受け持ち、データを取得する側がKafkaに問い合わせてデータを取得するので色々都合がいいみたいです。

で、Kafkaはクラスタを組める作りになっていて可用性が高いよ、ということらしく、そういったクラスタの情報とか何たらのデータをクラスタ間で持つようにApache Zookeeperを利用しているとのこと。

おすすめ学習ソース

で、最初の一歩はネット上のソースで何となく理解したのですが、いまいち理解しきれなくて色々学習ソースを探している中、有料ですがいい学習ソースを見つけました。

https://www.udemy.com/kafka-cluster-setup

しょっちゅう90%近いセールを行っていることで有名なUdemy*1ですが、上記Udemyのコースをたまたま見つけてやってみたところ、かなりよかったです。AWS上にZookeeperとKafkaのクラスタを組んで、Kafkaの運用の仕方だけでなく、Zookeeperはどういう情報を持っているかとか、Kafkaのパフォーマンスを確保するときに注意した方がいいことなども含めて教えてもらえるので、初心者の私としては学びがありました。

仕事で既にKafka運用している人には当たり前すぎる内容しかないと思うのですが、これから学び始めようとする人にはオススメできると思います。

講座内の"Configuring Kafka in production is AN ART"という文言が非常に印象に残っています。

最後に

Apache Kafka、いじっていたら何となく面白くなってきたので、仕事のことも視野に入れつつ、趣味でも少しずつ触ろうかなと思いました。

*1:今回のコースは90%オフだかの時に見つけて、1200円でゲットしました