Literate Computing for Reproducible Infrastructure による研究・教育環境の構築と運用長久 勝 1), 政谷 好伸 1), 谷沢 智史 2), 中川 晋吾 3) 合田 憲人 1)
1) 国立情報学研究所 クラウド基盤研究開発センター
2) 株式会社ボイスリサーチ3) 有限会社カラビナシステムズ
mnagaku@nii.ac.jp

Construction and operation of research and educational environmentby “Literate Computing for Reproducible Infrastructure”
Masaru Nagaku1), Yoshinobu Masatani1), Satoshi Yazawa2), Shingo Nakagawa3), Kento Aida1)
1) Center for Cloud Research and Development, National Institute of Informatics
2) Voice Research Inc.
3) Carabiner Systems, Inc.
概要
「Literate Computing for Reproducible Infrastructure（以下、LC4RI）」の方法論に基づき、「Jupyter Notebook」を使った、システムの構築と運用を実践している。実践の中で、システム構築や運用に関わるドキュメントの不備や自動化の弊害など、いくつかの既知の問題に対処できることが分かった。また、実践のために「Jupyter Notebook」の機能拡張も行っている。本稿では、LC4RI による既知の問題の解決方法、および、システムの構築と運用に LC4RI を活用するために実施した機能拡張について報告する。筆者らが機能拡張を行った「Jupyter Notebook」は公開されており、誰でも自由に利用が可能である。

1 はじめにDevOps の概念やプラクティスの浸透により、web アプリケーションを中心として、開発成果物を簡単に繰り返し何度でもデプロイすることが一般的に可能となった。しかし、そのアプリケー

築と運用に LC4RI を活用するために実施した機能拡張について報告する。

2 構築と運用における既知の問題
2.1 構築における既知の問題システムの構築において、よくある問題として、ションを載せる基盤の構築や運用においては、簡ドキュメントの不備を挙げることができる。例え

単に繰り返し何度でも再構築することは、未だにば、ベンダーに外注され納品されたシステムには、一般的に実現されているとは言い難い。

日々の運用やトラブル発生時の対処のため、併せまた、システムの構築や運用を、最終的に管てシステムの構築方法や操作方法に関するドキュ理者、即ち人間が責任を持つワークフローであるメントが納品されるのが一般的である。このドと考えた時、属人性や忘却が問題となる。この問キュメントにおいて、しばしば、実行するコマン

題を、自動化によって解決しようとするアプロー

ドの記載が漏れている、コマンドに指定する引数チもあるが、効果は限定的である。

が誤っている、などの不具合が混入していること

筆者らは、これらの問題に対処するための方法がある。

論 と し て 「 Literate Computing for Reproducible

これは詳しく見ると、ドキュメントを作成したInfrastructure（以下、LC4RI）」を提案しており、構築作業担当者にとって実行することが当たり前

所内に構築した研究・教育向けクラウド基盤の構すぎるために書き漏らした、構築作業を試験的に築や運用において、実践を行っている[1][2]。本稿実施した際に作成されたドキュメントの雛型に対では、筆者らの実践を通して得られた LC4RI によして実環境の情報を上書きして最終版とする過程

る既知の問題の解決方法、および、システムの構で上書き作業に漏れがあった、スケジュールの都合から構築後に急いでドキュメントを作成したたストで一元管理する「Literate Programming」[6]のめに誤りを混入してしまった、などの作業ミスに考え方を、IPython のブラウザベースの Notebookよるものである。

スタイルインタフェースである「Jupyter Notebook」

また、納品時の検収において、日々の運用につ（図１）[7]でコンピュータの操作に適用しようといてのドキュメントは、実際に試して不具合を見いうものである。元々は、オープンサイエンスのつけることができるが、トラブル発生時の対処（例文脈から提唱されている。

えば、障害時の系切り替え手順や、バックアップ

筆者らは、この「Literate Computing」を、シスからの復元手順）については、実際に試すことがテムの構築や運用に用いる実践として、Notebookできないものもあり、不具合を見つけられない場を、そのまま実行可能な手順書として使っている。

合も多い。

「for Reproducible Infrastructure」とは、構築手順書

研究・教育環境に特有の問題としては、さまざとして正しく動く Notebook があれば、簡単に繰りまな環境を、それぞれ特定の期間だけ使いたいと返し何度でも同じシステムを再構築できるといういうものがある。それぞれを別々のシステムとしことである。また、ドキュメントとコードだけでて構築し維持し続けることはコストパフォーマンはなく、実際の動作結果も一体として管理・比較

スが悪いため、クラウド基盤上に、それぞれを必参照可能とすることで、システム固有の事情や、要な期間だけ構築し維持したいが、受講生の増減システムの改変の経緯などの情報を留め、運用者や、教材のアップデートなど、毎回の構築で変化間で個々の環境や作業における関心を共有可能とする部分も多く、簡単ではない。

することで、人間中心の柔軟な自動化を実現する

2.2 運用における既知の問題ということでもある。

システムの運用において、人為的なミスを防ぐ目的で、自動化を採用することが、近年、増えている。
しかし、現代のシステムは、互いに依存する複数のミドルウェアから構成されている場合が多く、個々の構成要素のセキュリティパッチや機能修正に伴って、当初に設定された自動化機構が、運用予定期間の途中で動かなくなる可能性がある。
また、自動化された部分について、運用している人間が機械に依存してしまい、関心が薄れるこ

1 枚の Notebook は、それぞれ複数のドキュメントとが多い。この状態になってしまうと、自動化機部分とコード部分から構成される。選択状態の構が動かなくなった場合に、人間がリカバリを行コード部分を実行するボタンがあり、そのままうことが難しくなってしまう[3]。

Notebook 上で処理を実行できる。実行結果はコー

自動化機構は、ツールと、そこで実行されるスド部分の直下に表示される。

クリプトで実現されることが多いが、システム固図１：Jupyter Notebook

有の事情や、システムの改変の経緯などの情報を、同じドキュメントに書いておくことが難しい。ス

3.1 構築における既知の問題への対応

クリプトのコメント文として書くには量が多く、LC4RI の対象システムは、構築物の納品よりも、Wiki など分離したドキュメントにしてしまうと管構築や運用のためのドキュメントの納品の方が重理が煩雑になる。

要となる点で、これまでの一般的なシステム構築

3 LC4RI の提案とは異なる。
構築手順書である Notebook を実行して、正し本稿で使う意味での「Literate Computing」は、くシステムが構築できなければ、意味がないため、「IPython」の開発者である Fernando Perez が、2013

検収する対象は構築物ではなく構築手順書となり、年以降、ブログ[4]や論文[5]で言及しているものを構築手順書によってシステムを正しく構築できる指す。これは、ドキュメントとコードを同じテキことを確認することによって検収となる。
簡単に繰り返し何度でもシステムを再構築できるため、構築され試験動作中のシステム上で障筆者らは、それを補うために、複数のプラグイン害を発生させる試験も、容易に行える。障害対応を開発し、「Jupyter Notebook」を拡張して用いてい手順を記した Notebook が正しく動かなかった場る。それらのうちの 5 つを紹介する。

合も、原因を調べ、Notebook を修正し、再構築し4.1 実行状況に応じた着色た環境で再試験するなど、整理された状態で反復作業が行える。
さまざまな環境を、特定の期間だけ、毎回少しずつ異なる状態で提供したい場合、それぞれの環

Notebook のコード部分を自動で順次実行する場合など、どこまで処理が進んで、仮に失敗した場合もどこで止まったのか、素早く把握したいニーズがある。

境構築のための Notebook を用意することで、対応これに応えるため、実行状況に合わせて、各が可能である。年に数回しか行わない作業の場合、コード部分を動的に着色することで、視認性を向以前対応した人間でも作業内容を忘れていること上させた。着色がないと、Notebook を上から順にが多いが、ドキュメント部分に記載された技術情確認しないと状況が分からないが、この機能によ報や併せて保存された実行履歴を手掛かりに、以り、一目で把握できる。

前の対応を思い出して、作業にあたることができる。
3.2 運用における既知の問題への対応「Jupyter Notebook」には、コード部分を順番にすべて実行する仕組みがあり、外部のスケジューラと連携することで、自動化に対応することが可能である。
何らかの要因で Notebook 全体の処理が失敗した時も、Notebook のドキュメント部分に記載された技術情報や併せて保存された実行履歴を手掛かりに原因を調べることができるため、人間が行うリカバリ作業が支援される。
システム固有の事情や、システム改変の経緯な

図２：実行状況に応じた着色と、実行後の凍結
4.2 実行後の凍結

ども、Notebook のドキュメント部分に記入し、コー構築や運用の作業においては、同じ操作を繰りド部分と合わせてメンテナンスが可能であり、関返し行ってはならないもの、冪等性が保証されな連する知識を集中的に管理できる。

い操作が、多数存在する。例えば、設定ファイル

システム運用における自動化の採用では、自動に特定の文字列を 1 行追加する操作があった場合、化できるかどうかを判断基準にした事例が多く、誤って複数回、同じ操作を行うと、システムが設効果を考えて優先順位は付けるものの、基本的に定内容を正しく解釈せず、起動に失敗することや、すべて自動化したいというモチベーションで行わ期待していない挙動で振る舞うことがある。

れることが多い。Notebook ベースの場合は、自動この問題に対処するために、正常に実行が終化に対応できるだけでなく、スキルトランス

わったコード部分を「凍結」状態にし、その状態ファーのために一時的に人間が Notebook を読みを解除しない限り、再実行を指示しても、実行がながら作業するなどの対応も容易であり、人間中スキップされる機能を追加した。システムの再構心の柔軟な自動化を実現できる。

築を担保できていて、元に戻すことが可能であっ4 LC4RI のための拡張「Jupyter Notebook」は、もともと、対話的に計算機実験やデータ分析をするためのツールとしてても、誤った操作でシステムが停止することを防げるわけではない。この機能を追加することで、操作のミスを低減させることを目指している。
4.3 実行結果の保存機能広まったもので、構築や運用のためのツールとし

Notebook には、ドキュメント部分とコード部分て作られたものではないため、LC4RI のユースに加え、コード部分の実行結果を表示する部分がケースから見た場合、不便を感じる部分がある。

ある。構築や運用の作業においては、コード部分

の実行結果がこうなるべき、そうでなければ問題が起きていると判断するべき、という場面が多くあるため、「コード部分の実行結果がこうなるべき」という情報は重要である。しかし、従来のNotebook では、その情報をドキュメント部に記載するしか方法がなかった。
そこで、実行結果を簡単に保存する機能を付与し、以前の実行結果と、今の実行結果の比較を支援するようにした。以前の実行結果を、一種のお手本として参照できるようになったことで、作業を進める上で、作業者に安心感が与えられる。また、専用のインタフェースにより、作業者が実行
図５：まとめ実行機能結果の比較を行うよう促すことで、作業中の見落としを防ぐ効果も期待できる。

4.5 lineage の導入
運用に関する Notebook は、運用過程の中で、改変されたり、派生したり、増えていくことになる。運用の改善や、環境の変化などは、Notebookの改変や派生の履歴の中に、その痕跡を残すこととなる。筆者らは、Notebook の改変や派生の履歴を分析することで、運用に関するケーススタディが行えるのではないかと考えた。
そこで、Notebook と、その構成要素であるド
図４：以前の実行結果と比較

キ ュ メ ン ト 部 分 や コ ー ド 部 分 に 、 一 意 な ID
「lineage」を付与して、Notebook の複製時に引き4.4 まとめ実行機能多くの記述を含む Notebook は縦長になりがちで、視認性が悪くなり、全体を把握するのが難し継がれる機能を追加した。これにより、lineage 群の類似度から、Notebook の系譜を特定できるようになった。

くなる。この問題に対処するために、見出しによっlineage の系統図を作成してみたところ、同じ系て章立てた単位で記載内容を畳み込み表示するプ

統においても、特定の時期に大きく変化が見られ、ラグインとして「Collapsible Headings」がある。し時代区分を確認することが可能となった。

かし、畳み込まれた場所に含まれるコード部分をNotebook の系統と、変化が起きた時期を運用チー実行するには、畳み込み表示を解除する必要がムで確認すると、運用を見直した（つまり、あった。

Notebook も見直されている）時期など、実際の運そこで、畳み込み表示の際に、畳み込まれた場用現場の変化と関連が確認できた。

所に含まれるコード部分の状態をアイコンで表示し、更に、畳み込まれた場所に含まれるコード部分のすべてをまとめて順次実行できる機能を追加した。これにより、コード部分の実行状態も含め、視認性が向上した。作業の際には、ドキュメントを詳しく追いながら行いたい場合は、畳み込み表示を解除し、定型的なセクションは畳み込み表示の状態でまとめ実行するなど、柔軟に作業方法を選択することができる。

図６：lineage の系統図と運用チームの記憶5 成果物の公開LC4RI の考え方に基づき、筆者らが実務に使っている拡張された「Jupyter Notebook」は、それを構成するプラグイン群のソースコードを github で公開している。
NII クラウド運用チームの github リポジトリ
https://github.com/NII-cloud-operation
また、筆者らが実務で使用する際には、Docker環境に、拡張された「Jupyter Notebook」をデプロイして使っている。このコンテナイメージもDocker Hub で公開している。
NII クラウド運用チームの「Jupyter Notebook」コンテナイメージ
https://hub.docker.com/r/niicloudoperation/notebook/
この上で、アプリケーション環境を構築し運用するための Notebook 群も公開している。
Hadoophttps://github.com/NII-cloud-operation/Literate-compu
ting-Hadoop
Elasticsearchhttps://github.com/NII-cloud-operation/Literate-compu
ting-Elasticsearch6 さいごに2014 年度に、新規システムの運用ドキュメントを Notebook で納品してもらうところから取り組みを始め、現在は、独自の構築・運用環境を整えるところまで進んだ。
実践の中で、効果を実感してはいるが、今後、客観的な効果測定にも取り組みたい。
また、成果を積極的に展開し、運用の現場の助けになれればと考えている。例えば、Notebook の書き方のパターンによるガイドなど、ノウハウの形式知化を進める取り組みが必要だと考えている。

参考文献[1] 政谷 他、インフラ・コード化の実践におけるIPython notebook の適用、信学技報、115 巻、72 号、27-32、2015 年[2] Y.Masatani 、 Collaboration and automatedoperation as literate computing for reproducible
infrastructure、JupyterCon、2017 年[3] 稲垣敏之、人と機械の共生のデザイン：「人間中心の自動化」を探る、森北出版、2012 年．
[4] F.Perez、"Literate computing" and computational
reproducibility: IPython in the age of data-driven
journalism、
http://blog.fperez.org/2013/04/literate-computingand-computational.html、2013 年．
[5] F.Perez 他、IPython: components for interactive
and parallel computing across disciplines.、AGU
Fall Meeting Abstracts.、2013 年．
[6] D.Knuth、Literate programming.、The Computer
Journal、27 巻、2 号、97-111、1984 年．
[7] https://jupyter.org/