PyCon JP 2018カンファレンスレポート

[2日目]プログラミングの愉しみ,“トイル”との戦い~Python 2→3移行の実際,先端事例紹介のLTからクロージングへ

この記事を読むのに必要な時間:およそ 5 分

Djangoアプリケーションにおけるトイル撲滅戦記

(二宮健)

株式会社アイリッジのサーバーサイドエンジニアである松田康章氏による発表です。

トイルとは,⁠本番サービスに関する作業で手作業で繰り返し行われ,自動化することが可能であり,戦術的で長期的な価値を持たず,作業量がサービスの成長に比例する」もののことであり,SRE(Site Reliability Engineering)の中「Google社が提唱・実践しているシステム管理とサービス運用の方法論」ではこの「トイルの撲滅」が主な目標の1つとして目指されているそうです。この発表では,アイリッジ社内で運用されているDjangoアプリケーションを例に「トイルの撲滅」を目指して活動していた取り組みが紹介されていました。

スタートアップの人手不足で外注に出していたアプリケーションを,今後の拡張を考慮して内製化したところ,同じような依頼を受けて開発できない「トイルにもがき苦しむ時代」が来てしまったといいます。方針として,以下の3つの手法・指針を積極的に使ったそうです。

また,具体的に行った活動として,以下のようなものが挙げられていました。この記事で具体的に触れませんが,もしご興味があれば最後に紹介する資料や映像を見てみてください。

  • Docker-Composeを活用して開発環境構築を簡単にした
  • Amazon ECSとGitLab CIを活用してデプロイ作業を自動化した
  • AWSのCloud Watch Logsを活用して,ログの監視・調査を容易にした
  • RDSの負荷が高かったため,Django QuerySetで生成されるクエリを高速化した
  • ログを残さずにエラーが握りつぶされていていたため,リファクタリングで改善した
  • AWS X-RAYを利用して,本番環境の状況をリアルタイムで把握できるようにした

これらの対応により,⁠障害対応が減った」⁠エンジニアリングに割ける時間が増えた」そうです。それに加えて「キャリアアップもできた」という嬉しい効果もあったようです。最後のまとめとして,それってトイルじゃね?』の精神」で問い続けること,トイルは無限に湧き続けるので「継続的に改善できる状態を作る」こと,⁠Managed Service・CI/CDの活用」を行うことを重要な点として挙げられていました。

松田康章氏

松田康章氏

最後に会場からの質問もいくつか挙がっていました。たとえば「どのように優先度をつけていたのか」という質問に対しては「サービスの稼働に影響を与えるトイルから優先して撲滅していった」と答え,⁠CI/CDの自動化でDBのマイグレーションが問題になると思うが,どのように解決しているか?」という質問に対しては,⁠デプロイ時にマイグレーションが行われるようにしている。そのためダウンタイムは発生してしまうが,あらかじめ説明して問題を回避している」と説明していました。

発表を聞き終わってみると,意外にDjango独自の話は少なく,むしろ他のフレームワークを使っている開発者でも活用できる内容だったと思います。特にAWSを活用しているエンジニアは以下の資料や動画をチェックしてみてはいかがでしょうか?

C拡張と共に乗り切るPython 2→3移行術

(二宮健)

次に紹介するのはGROOVE X株式会社に所属する末田卓巳氏による発表です。この発表では,株式会社GROOVE Xでのロボット開発でPythonを利用している上で,C言語で書かれた拡張モジュールが原因で移行に苦戦し,それをどのように克服してきたかをサンプルコードとともに紹介されていました。

ロボット開発では,クラウドの開発環境と違いスケールアップが難しいため,特に低レイヤーで,実装の楽さよりも高速な動作が必要とされるそうです。そのモジュールに多くのアプリが依存することもあり,GROOVE X社内の場合は,センサやマイコンとやりとりする値を格納する共有メモリにアクセスするモジュールがそれに該当してしまったといいます。この「共有メモリモジュール」では,CのAPIをまず実装し,そこから各言語向けのバインディングを実装という戦略をとってきたそうです。

発表では,さらに簡単なサンプルコードを使って,どのようにPython 2/3を互換化していったかに触れられていました。まずドキュメントを調べ,Python 3では)変更がたくさんあったので,Python 2のAPIを無傷で済ませることはできませんでした」と書かれており,拡張モジュールのAPIはPython 2/3間で互換性が無く,必ず改造が必要になることがわかったそうなのですが,⁠大変だがやるしかない」と腹を括って互換モジュールの作成に臨んだそうです。

末田卓巳氏

末田卓巳氏

実際に修正が必要だった点として,以下の3つが挙げられていました。

  • Python2/3で互換性のない文法は__future__, six, python-futuren等で互換性を確保
  • モジュールのエントリポイントが全く異なる部分はC言語のプリプロセッサ(#if, #else, #endif)で乗り切る
  • Python2のstr使用箇所は,Python3でbytesに直す必要がないかチェック

質問もいくつか挙がっていました。たとえば「2/3対応する時に,C拡張ではなくてctypesを使う選択肢は無かったのか?」という質問に対しては,⁠私も新しく書くとしたらCFFIやctypesを使うと思う。実際にPythonのガイドにもそう書いている。」と答えていました。

著者プロフィール

陶山嶺(すやまれい)

事務局チームで主にメディアスポンサーを担当。PyCon JPにはPyCon JP 2015で初めて一般参加。Python自体に貢献しようとPyCon JP 2016からはスタッフとして参加している。

渋谷のSENSY株式会社に勤務し,広島の尾道でリモートワークを実践中。前職ではiOS/Androidアプリ開発,現職ではPythonとGCPでのサーバーサイド開発をメインとしている。

学生時代から一番好きな言語はずっとPythonで,GCPUG岡山の運営にも携わっている。

『WEB+DB PRESS Vol.104』で特集「イマドキPython入門」を執筆(共著)。

Twitter: @rhoboro


大堀優(おおほりゆう)

事務局チームでメディアスポンサーを担当。

現在は,新日鉄住金ソリューションズ株式会社で異常検知をはじめとした機械学習及びデータマイニングの研究開発に従事している。

Twitter: @Y_oHr_N


二宮健(にのみやたけし)

PyCon JP 2018で,メディアスポンサーやジョブフェアを担当。

株式会社LIFULLのAI・データ分析チームで,PythonやRubyを使って開発しているソフトウェアエンジニア。最近読んで面白かった本は『エンジニアの知的生産術 ──効率的に学び,整理し,アウトプットする』


花井宏行(はないひろゆき)

事務局チームで主にメディアスポンサーを担当。スタディプラス株式会社所属。PyCon JPにはPython未経験のままスタッフに参加。スタッフ参加がきっかけでPythonに興味を持ち,日々勉強中。

現職ではRuby on Railsでサーバーサイド開発をメインとしている。学生時代の縁で舞台監督や舞台運営のスタッフとしても活動している。

Twitter: @hanahiro_aze

バックナンバー

PyCon JP 2018カンファレンスレポート