<jupyter_start><jupyter_text>LC4RI入門所要時間：30分NIIクラウド運用チームの実践する「LC4RI（Literate Computing for Reproducible Infrastructure）」について、お話します。  Literate Computing とは何か[コンピューティング](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0)["Literate computing" and computational reproducibility: IPython in the age of data-driven journalism](http://blog.fperez.org/2013/04/literate-computing-and-computational.html)[Notebook interface](https://en.wikipedia.org/wiki/Notebook_interface)コンピュータとインタラクションしながら作業する時、個々の操作と結果の対の列が文脈を構成します。操作だけの列や、一部が欠けた状態では、文脈が保存されているとは言えません。Pythonの対話型シェル「IPython」の作者である <NAME> は、IPythonによるコンピューティングの文脈を保存するために Notebook interface を採用した「IPython Notebook（現 Jupyter Notebook）」を作りました。コンピュータの操作の列では、その操作の意図が明確に読み取れない、読み取りにくい場合もあるため、ソースコードに含まれるコメントのように、自然言語による注意書きが効果的です。この注意書きを実現するため、Jupyter Notebook には、マークダウンでドキュメンテーションする機能があります。実際の操作履歴に加え、操作時の背景をメモしておくことで、文脈が保存され、あとから読んだり、再利用したりできるようになります。  情報システムの構築・運用情報システムの構築・運用では、エンジニアがCLIを操作して作業することが多くあります。また、その作業証跡が必要となったり、背景知識を理解してシニアエンジニアと同じ作業をできるようにトレーニングしたり、完全に同じではないが似ている作業を頻繁に行ったりします。情報システムの構築・運用におけるこの特徴が、Literate Computing とマッチすることから、Jupyter Notebook を用いて情報システムの構築・運用を行うアイデアが生まれました。その実践により生まれた手法が「LC4RI」です。また、「[Infrastructure as Code](https://ja.wikipedia.org/wiki/Infrastructure_as_Code)」の流行によって、情報システムの構築・運用に利用できるツール群が整備されたことも、「LC4RI」の取り組みを進めやすくしました。例えば、「[Ansible](https://www.ansible.com/)」です。   実例：Ansible経由のOSパッケージのアップグレードJupyter Notebook が動いているまずは、ディストリビューションの確認から。<jupyter_code>!cat /etc/issue<jupyter_output><empty_output><jupyter_text>Ubuntuなので、 apt-get upgrade してみましょう。----まず、操作対象をインベントリファイルに書いておきます。今回の対象は、localhost、1台とします。<jupyter_code>!echo "localhost" > hosts<jupyter_output><empty_output><jupyter_text>https://docs.ansible.com/ansible/latest/modules/apt_module.htmlaptモジュールを使ってupgradeを指示します。今回は、対象がローカルなので「-c local」オプションを指定します。これを付けないと、aptモジュールなどLinuxを対象とした操作はssh経由になってしまいます。今回は、aptの実行に管理者権限が必要なので、「--become」オプションを指定します。今回は、update後にupgradeするように「-a "update_cache=yes upgrade=yes"」を指定します。<jupyter_code>!ansible -i ./hosts all --become -c local -m apt -a "update_cache=yes upgrade=yes"<jupyter_output><empty_output><jupyter_text>（警告はいっぱい出たけど）upgradeに成功した！----みたいなNotebookを使った作業を行います。  完全に同じではないが似ている作業1.2.1の手順が Notebook として存在している時、操作対象を「localhost、1台」から「192.168.1.11〜192.168.1.19、9台」に変えて apt-get upgrade したい場合、 hosts の内容を9台の指定とし、「-c local」オプションを省いて ansible コマンドを実行すれば良いでしょう。これを、 Notebook のコピーと改変で行うことができます。  背景知識を理解してシニアエンジニアと同じ作業をできるシニアエンジニアが、ターミナルを使って、さまざまなコマンドを駆使して作業を行った時、その作業内容を他のメンバと共有しないと、知見が属人化します。技能移転も行えません。シニアエンジニアが、 Notebook を使って、さまざまなコマンドを駆使したり、途中でググったメモを残すなどして作業を行った時、他のメンバと Notebook を共有することで、知見を共有できます。 Notebook を通じて、シニアエンジニアの作業を追体験でき、技能移転が行えます。  作業証跡<jupyter_code>!ls -la
!ls -la .log<jupyter_output><empty_output><jupyter_text>今日の日付のディレクトリを覗いてみましょう。<jupyter_code>!ls -la .log/2019xxxx<jupyter_output><empty_output><jupyter_text>logファイルを1つ覗いてみましょう。<jupyter_code>!cat .log/2019xxxx/2019xxxx-xxxxxx-xxxx.log<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11383478844862324, 'fraction_numerical': 0.02921423774345198, 'mean_word_length': 15.102702702702702, 'pattern_counts': {'":': 0, '<': 26, '<?xml version=': 0, '>': 27, 'https://': 5, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 2, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '536885', 'license': 'MIT', 'n_tokens_mistral': 2097, 'n_tokens_neox': 1918, 'n_words': 88, 'path': 'LC4RI_Introduction.ipynb', 'repo_name': 'mnagaku/seminar-lc4ri', 'size': '2986'}