以下に含まれる実行例はAnaconda3とその拡張ソフトウェアがインストールされているPCを前提にしています。 ただしインストール状況によっては説明中の一部の拡張機能を利用できない場合があります。 それらを試したい場合、BYODのPCに各種ソフトウェアをインストールして使用することを検討してください。
セミナー等のレジュメ作成、レポート作成、論文の草稿作成、各種資料の作成、種々のメモの作成には非常に便利です。本格的な長いプログラムを作成する時には必ずしも適していない場合もあるでしょうが、定規や色鉛筆を超える機能を持った文房具としてのプログラムを作成して資料の体裁を整えることや、短いプログラムを実験的に作成して試すには向いています。機械学習やデータ処理の実験のプログラム作成と記録には多くの場合に適しています。この資料自身もJupyterを用いて作成しました。
文章とプログラムを混在させて記述するというプログラミングスタイルは、 D. Knuthによる文芸的プログラミングというプログラミングパラダイムに遡れます(1983年投稿の論文、Knuth著「文芸的プログラミング」(1994)もあります)。 そこではプログラムを文芸・芸術作品の一種としてそのドキュメントとともに同時作成するという考え方をします。 プログラマはプログラムを書く際の思考過程に沿う形でプログラムとドキュメントを記述していきます。 Knuthはそのようにして$\mathrm{\TeX}$(語句説明)の処理系を記述しました。 当時行われたのはPascalのコード生成と、ドキュメントとしては$\mathrm{\TeX}$のソースの生成です。
その後有料ソフトウェアであるMathematicaに notebookインタフェースが組み込まれました(1988年頃)。 有料の数学ソフトウェアには同様の機能を組み込んだものがいくつかあります。 これらは文芸的プログラミングを(少なくともある程度)行える環境となっていますが、 実際の使われ方は紙のノートでやるように雑多な式の変形を行ったり、 グラフを描いたり、 アイデアを書きとめたり、 メモ的な使い方をしたりします。 芸術的な指向性で使うという場面はむしろ少ないかもしれません。
現代的なnotebookは文章、データ、プログラム、グラフ、表、画像等を混在させて編集・表示できるものであり、 データやプログラムを少し改変して何度も試すことが簡単にできます。 プログラムの処理結果をグラフ等の形で文章と混在させて表示できます。 これは定規やコンパス、色鉛筆等の文房具を使って紙のノートにグラフを書き込んでいたのを、 代わりにプログラムにそれをやらせているわけです。 紙のノートの場合よりはるかに正確かつ精密にグラフや画像を表示させることができます。
実現方法は、Notebookのデータ処理を行うサーバがあり、操作はwebブラウザから行います。また多人数でnotebookを閲覧・共有することも一部で可能になっています。 Notebookインタフェースは数学系・データ分析用のソフトウェアでの利用が多かったと言えますが、 プログラミング入門や他の領域でも微修正を行いつつプログラムを書く場合に特に適しているため、利用が広がりつつあります。
Jupyterは元々、Pythonをwebブラウザ上でで対話的に実行するIPythonという環境があり、 それの処理系部分を切り離して多言語対応を可能にしたもので、 notebookの利用が可能となっています。 その名称は主要な対象言語であるJulia、Python、Rから来ています。 他に機能が類似したシステムとしてはApache Zeppelinがあります。
(この項目には未説明の用語が色々出てきますので、後で読み直していただけた方がよいかもしれません。)
上の節で説明しましたように、
プログラムを(ある程度本格的な)文章や他のデータとともに記述するというスタイルは結構前からありました。
しかしフリーソフトウェアとして現在の形態のものが出てきたのは比較的最近です。
Notebook形式の便利さが世の中に十分に認識されると、
今後はフリーを含めて類似ソフトウェアが増えてくることが考えられます。
競争が激しくなれば自然に機能競争も起きてくるでしょう。
Jupyterは非常に便利なフリーソフトウェアであり、 さまざまな拡張機能が開発され、追加されています。 それでもさらに追加されると便利な機能がいろいろあると考えられます。 また、拡張機能があっても最新のJupyterとの互換性が十分に確認されていないものが多い状況にあります。 例えば編集機能は、小さいプログラムを編集するには十分かもしれませんが、 vimやEmacs(両者の機能にも考え方の違いから大きな差があります)と比べると、 もう少し機能を増やしたいと思うことはあるでしょう。 またデバッガ的な機能も本格的な開発環境のデバッガと比べると差があります。 この面では言語による差があり、ソースでのエラー箇所がわかりにくいと特に機能差が目立ちます。 Notebook環境にデバッガをうまく統合することができればもっと使いやすくなるでしょう。 これらは開発環境という面では重要ポイントであり、短期的にも更なる改良が行われることが望まれます。
Notebook形式のインタフェースに表計算を統合する、という拡張も考えられます。 表計算は、プログラミングという名の付く学習を必ずしもしなくても 計算機にある程度自由な計算をさせられる優れたインタフェースであり、登場当時画期的なものでした。 現在のJupyterでは表計算のシートをnotebookの一部として埋め込んで類似の使い方をすることはできません。 統合すれば、日常の文房具的な計算機利用のかなりの部分をカバーすることになります(授業等でも表計算ソフトを別にやらなくてよくなります)。 しかしこの方向性の拡張には、kernelの言語で同じ計算処理と結果の表示が可能なのだから必要ない、 あるいはデザイン上の思想に合わない、という反対意見もあるかもしれません。 また、入れるにしても主にJupyterの側に入れるのか、 kernelの言語のライブラリとして入れるのか、 その時に言語の拡張をした方が綺麗に入るのか、 など多くの選択肢があり、設計上の議論点が多くあります。
次に少し長期的な話です。 過去に属する技術であって以前からnotebookにおいて実現可能だがまだ実現されていないこともいろいろあります。 しかしNotebookインタフェースの未来がどのようなものになりえるのか、 まだ実現途上の技術も含めて考えてみます。 またここでは専門家だけでなく一般の人にとって意味がある可能性があるものも含めます。
まず音声インタフェース等を組み込んだものを作ることができるでしょう。 数式やプログラムの音声入出力、 またスマートフォンやタブレット等で数式や図形などを手書き入力して$\mathrm{\TeX}$のソースを得たり、 曲線の方程式を得たりなどの技術を開発して統合することが考えられます。 VR,AR技術等の応用も考えられ、notebookの操作や結果の表示・表現に大きな変革の可能性があります。 またこの方向性ではnotebookという形態・メタファーそのものも変わるかもしれません。 人工知能の様々なアプリケーションへの応用の一環として、 様々なアシスト機能がついたものが出てくる可能性があります。 Markdownセルの自動翻訳は、読むだけであればwebブラウザの機能として実現できそうですが、 セル内容を使用言語の異なる利用者が編集すると元原稿の言語の文章に反映されるようなものも考えられます。 SNSと統合してプログラムや数式の質問を容易に行えるようにすることもできるでしょう。 数式やプログラム、データの類似検索のインタフェースとしても適していると考えられます。
クライアントサーバモデルで動作します。 クライアントはEdgeやChrome、Firefox等のwebブラウザであり、Jupyterサーバがローカル(ここではクライアントが動作しているPCのことをローカルと言っています。通常は目の前にある場合が多いでしょう)あるいはリモート(ローカル以外のPC)で動作してそれらの間で通信が行われます。
サーバはnotebookの状態を保持し、それの表示を計算してHTML等に変換し、クライアントのwebブラウザに送ります。WebブラウザはそれをユーザのPC画面に表示します。その際にはJavascriptのプログラムが多用されます。これは通常のwebサーバとクライアントの関係とほぼ同じです。通常のwebページの場合との違いはnotebookの内容をクライアント側からほぼ完全に変更・編集可能なのと、やはりクライアント側から任意のプログラムを編集・入力してサーバ側で実行可能であることです。プログラムの実行結果はクライアント側に送られて表示されます。
Notebook内のプログラムはサーバ側のkernel(Jupyterサーバの、プログラムを実行する部分)で実行されます(計算機関係ではkernelという言葉が他の意味でも用いられるので注意してください)。 Kernelはnotebookごとに異なりえます。一つのnotebookに対応するkernelは一つだけですが、途中で切り替えることは可能です(実際にはあまりしません)。通常、notebookの画面の右上に言語(kernel)名が出ています。ある言語をJupyterで実行するには、そのプログラミング言語のkernelを予めサーバ側にインストールしておく必要があります。使っているJupyterサーバでどのようなkernelが既インストール済みなのかを見る方法は後で述べます。
最も単純にはJupyterサーバをクライアントと同じローカルPCで動かします。そのためにはローカルPCにJupyterサーバをインストールしておく必要があります。メディアセンタのPCの場合にはWindowsにAnaconda3がインストールされており、Jupyterもそれに含まれています。それを利用する、つまり言語としてPythonを使用するのであればメディアセンタのPCの場合、ユーザはインストールする必要はないです(ただしインストール状況によっては一部の拡張機能を利用できない場合があります)。またJuliaなど他の言語を利用したくて、その言語のインストールパッケージにJupyterが含まれている場合には、それをインストールすれば利用できるはずです。ただしJuliaはインストール済みなのに、Julia用にはJupyterを利用できない状況になっている場合があります。
以下では主にBYODのPCにPythonの処理系をインストールすることでそれに含まれるJupyterをインストールする例を紹介します。ただしBYOD以外の場合にも適用できる部分は多いです。Juliaをインストールして使用したい場合の資料は別に用意してあります。
BYODのPCの場合、少なくとも購入時点ではJupterはインストールされておらず、インストールの必要があります。
簡単でお勧めなのはAnacondaというPythonのディストリビューションをインストールすることで、こうするとJupyterがAnacondaに含まれているので同時にインストールされ、動作可能になります。当然Pythonも(Jupyterからも)利用可能になります。Anacondaを利用している人は多いので、ネットで検索して情報を得るのも容易です。
但し、注意点があります。AnacondaにはPythonの処理系が含まれていますので、 インストールするとデフォルトで動作するPythonのversionが変わる可能性があり、 すでに利用しているPythonのプログラムによっては問題が生じる場合があり得ます。
Anacondaをダウンロードする際にはPythonのversionをどうするかを決める必要があります。初めてPython(Anaconda)をインストールし、特に他に使いたいPythonのソフトウェアがない場合にはPython3の方のAnacondaをインストールしてください。これはやはりこれからは新しい言語仕様のPythonが使われるようになっていくだろうからです。ただし過去に作られたソフトウェアでPython2を利用しているものを使いたい場合には考えないといけません。
後述するようにPythonの言語仕様は様々に分岐しており、実行したいアプリケーションによってどのディストリビューションをインストールするかが変わってきます。特にメジャーversionが違うPython2と3ではかなり言語仕様が異なっているために、3の処理系では2の方のプログラムを実行できない場合が数多くあります。また、一時期最新版のAnacondaでインストールされるPython3.6ではTensorflowが動作しなかったように、versionの細かい違いに注意しないといけない場合もあります。この場合には一つ前のversionのAnacondaをインストールするか、仮想環境としてPython3.5のものを用意する必要がありました。Versionの異なるPythonを利用する複数のアプリケーションを使う場合のために、Pythonのversion切り替えのソフトウェアも(こちらも複数)開発されています。どのversionのPythonを使うべきか考えないといけない場合や仮想環境などにより複数のPythonを使い分ける必要がある場合はこの資料の守備範囲外とします。例えばpyenvを使用してユーザのホームディレクトリ内にAnacondaをインストールし、それのJupyterを利用することも可能ですが、ここでは詳しくは述べません。
このようにややこしくなっている理由は、開発が非常に活発なため、Jupyterも含めてPython系の処理系側のソフトウェアは仕様やインストール形態の分散が激しく、同じ名称のソフトウェアが何通りもの版があってそれぞれそれなりに使われていたり、OSによってインストールのされ方が異なっていて同じソフトウェアがファイルシステム中の異なる場所にインストールされたりしてしまう場合があるということです。版の違いについてはそれを吸収するためのソフトウェアが別に提供されていたりもします(pyenvなど)。Aというソフトウェアをインストールした後でBという別のソフトウェアをインストールしたらそれに2種類のJupyterがインストールされてしまった、ということが起こり得ます(例えばA=Jupyterを含むAnaconda以外のソフトウェアで、B=Anacondaとするとこうなる場合があり得ます)。AとBが衝突せず別物として動作し、協調して動くべきところはちゃんとそうなればよいのです(例えばAとBがプログラミング言語だとして、Jupyterからそれらをうまく選択できるなど)が、そううまくいくとは限りません。うまくいかない場合は問題解消に苦労することになります。
以下、まずはインストールからコンソールでの初回起動までをOSごとに記します。なお表示されるversionや種々のデザイン等は時期によって異なります。あるいは全く違った方法でインストールするように変わる可能性もありますのでもしそうならリンク先を読むなり検索するなりして調査してください。注意点として、webブラウザでファイルをダウンロードした後ウイルススキャナのパターンファイルを更新してからダウンロードしたファイルを必ずスキャンするようにしてください。
インストールには3-4GB程度の空き領域が必要です。
Installing on Windows を参照してそれに従ってインストールします。 簡単には、GUI版インストーラの方を使うとよいでしょう。 ファイルをダウンロードしてスキャン後、ダブルクリックしてインストーラを起動します。 インストールの途中、以下の選択肢が出ます。
1の場合にはインストーラを起動したユーザのホームディレクトリ内にインストールされます。 BYODのPCではない場合、 例えば教育用計算機システムなどの場合には、 利用できる記憶領域が限られていることがあり、 1を行なって問題が生じないか検討する必要があります。
2の場合にはインストール先の位置が通常はC:\Program Filesなどとなります。 インストール先への書き込み権限が必要であり、 管理者権限の認証を経ることになります。 一箇所にインストールされて他の多くのアプリケーションと同様に複数ユーザで共用できます。
Installing on macOSを参照してそれに従ってインストールします。 簡単には、GUI版インストーラの方を使うとよいでしょう。 ファイルをダウンロードしてスキャン後、ダブルクリックしてインストーラを起動します。 インストールの途中、以下の選択肢が出ます。()内は薄く表示され、選択できません。
2の場合にはインストーラを起動したユーザのホームディレクトリ内にインストールされます。 利用できる記憶領域が限られている教育用計算機システムなどの場合、 2を行なって問題が生じないか検討する必要があります。 BYODのPCの場合には2以外にすれば複数ユーザで領域を共有できます。
3の場合にはインストール先の位置として通常は/optなどを指定します。 インストール先への書き込み権限が必要であり、 通常管理者権限のあるユーザで行います。 うまくいけば一箇所にインストールされて他の多くのアプリケーションと同様に複数ユーザで共用できます。 但しAnacondaのバージョンによって1の選択肢が消えている場合、 必ずしもサポートされていない可能性があり、 実際その後一般ユーザで実行するとエラーが出る場合があります。 これはエラーメッセージが特定するファイルのあるディレクトリ内のファイル達の許可の問題である可能性があります。 原因がそれであれば、管理者権限のあるユーザでファイル達の許可を他のユーザからも読み込み可能に変更してやるととりあえず動作する様です。 但し繰り返しますがこれは特定のバージョンの場合に動作する場合があったという話であって、部分的にあるいはバージョンによってうまく動作しない場合があるかもしれませんし、 他の問題も出てくるかもしれません。
許可の変更例(ターミナルで実行):
\$ sudo find /opt/anaconda -perm 0600 -exec chmod go+r {} \;↩︎
パス: /opt/anacondaは実際のインストール先に変更してください。
インストール後、それぞれの場合に応じ、実際に使用する各ユーザで環境変数PATHについて以下の設定を~/.bash_profileの最後に追加して再ログインしておきます。これらは自動で追加される場合もあるかもしれません。
2. export PATH=~/anaconda/bin:${PATH}
3. export PATH=/opt/anaconda/bin:${PATH}
自分で追加する場合、anaconda/binの場所が正しいかどうか確かめる必要があります。
Installing on Linuxを参照してそれに従ってインストールします。 WindowsやMacの場合と同様に自分専用(install as a user)か共用かの選択があります。 共用の場合には管理者権限が必要です。
例えばWindowsでMIT-Scheme(のkernel)やSageMathを後から追加する場合には問題含みの面があり、うまくインストールされているPCもあるでしょうが、それらと同様の水準で動作するようにBYODのPCに楽にうまくインストールできるかどうかはわかりません。環境やインストールする時期(パッケージの版)によっても難易度は変わると考えられます。その部分についてはここでは述べません。
Anacondaをインストールした場合、WidnowsであればメニューにJupyter notebookという項目があるなら、それを選択します。あるいはコマンド・プロンプトやPowerShell、MacやLinuxであれば仮想端末にjupyter notebookと入力し実行します。するとwebブラウザが立ち上がり、以下のような表示となります。
コマンドとしてjupyterを動かした場合には、Jupyterサーバがその時のカレント・ディレクトリ内部しか参照できなくなりますので注意してください。
これについて詳しくは省略します。これはリモートから利用できるJupyterサーバを運用しようという話であり、それなりに分かっている人が行うことですし、セキュリティ上の対策も必要で、この資料で扱う範囲を超えています。
リモートからJupyterサーバを最も簡単に利用するには、サーバの設定は特にいじらずにローカルにしか接続できない設定のままとしてsshのポートフォワーディングによるのが楽でしょう。 もちろんsshやファイアウォールの設定はセキュリティを考慮して正しく行う必要があります。
多人数で同一サーバのJupyterを使うにはJupyterHubがあります。
この節ではnotebookの利用方法について簡単に説明します。
右上の[New]
からkernelを選択します。例えばPython 3(3は表示されていない場合もあります)を選択すると、実行できるのはPythonで書かれたプログラムということになります。この時表示されるkernelが既にインストールされているkernelということになります。
Kernelを選択すると次のページが開きます。
タイトルから下2行目の、アイコンが並んでいる部分が(もしあれば)それはToolbarであり、
1行目のメニューから選択する操作の一部等をクリックにより実現しています。
Toolbarのボタンやキーボードショートカットの方が操作は楽だったりしますが、
以下では主にメニューによる操作についてのみ記述します。
Notebookが表示されたら、まず[Help]
メニューの[User Interface Tour]
を選択してください。
ポップアップした表示の右下のボタンをクリックしてゆくと、
基本的なユーザインタフェースの説明が表示されます。
[Help]
メニューには[Keyboard Shortcuts]
や種々のヘルプの項目があり、
それらを選択すれば詳しい使い方が表示されます。
それらのうちMarkdown
は節タイトルや強調、リンク等を入力する方法のまとめであり、
下の方は言語の説明になっています。
また[Help]→[Abount]
を選択するとJupyter等のversionを確認することができます。
この資料はversion 5.0.0のnotebook serverに基づいています。
新しいnotebookでは最初最下行にIn [ ]:
とその右側の枠が表示されます。これをセルと言い、notebookで入力・編集・実行する単位となります。セルにはtypeがあり、例えばプログラムのCodeなのかMarkdownなのかを指定します。当初はCodeのtype、すなわちプログラム(の断片)となっています。ここにプログラムを書いて編集できます。もちろんその時にkernelに設定されている言語として正しくないと、実行した時にエラーとなります。
Notebookの状態としてeditモードとcommandモードがあります。editモードではセルの中身を編集します。Commandモードではセルの挿入、削除、コピー、移動、分割等のnotebookレベルの編集を行います。
右上に「E」と表示されていて、セルの左端の縦線が緑色で、セルの中にカーソルが表示されているならeditモードで、セルの中身を編集できます(色に関しては後述のテーマを変えると変化します)。カーソルキーも使えます。入力を終えて[Shift]+↩︎
を押し、セルの中身を実行もしくは整形表示してみてください。Code typeのまま実行すると正しいPythonのプログラムでないとエラーとなるはずです。エラーが出ても問題ありませんが気になるならMarkdownに変更するとよいでしょう。Commandモードでは右上の表示が「C」に変わり、選択しているセルの左側の縦線が青色になります。この状態では[Edit]
メニューから選んだ操作などを実行できます。[Help]
メニューの[Keyboard Shortcuts]
を参照すると両モードで編集等のために利用できるキーボードの操作の概要が表示されます。これはメニュー中の[Edit Keyboard Shortcuts]
により変更することが可能です。
Markdownというのはmarkup言語の一つです。 Markupとは文章の表示の仕方や構造を指定することであり、 それを行うための他の言語としては例えば$\mathrm{\TeX}$やHTMLがあります。 Markdownは非常に簡単に指定を行えるのが特徴です。 しかし複雑な指定を行いたい部分に関しては他の高機能なmarkup言語の機能を取り込めるようにすることで補っています。 この名称は指定が(人間にとって)煩雑になりやすい他のmarkup言語を意識して洒落で付けた名称だと考えられます。
WordやWriterなど通常のワードプロセッサのソフトウェアはいわゆるWYSIWYG方式となっています。 それに対しMarkup方式の場合にはWYSIWYGとは異なり、markupのためのキーワードや記号が文章に混じることになります。 しかしMarkdownの範囲で済む場合には非常に簡便な指示が混じるだけで済みます(他の言語の機能を取り込んだ場合は別)。 またnotebook形式のMarkdownエディタの場合には一瞬で表示結果を確認することができ、 使い勝手はWYSIWYG方式に近づいています。
セルのtypeをMarkdownにするには対象セルを選択しておいてメニューの[Cell]→[Cell Type]→[Markdown]
を選択します。すると左側のIn [ ]:
が消え、Markdown typeとなります。同様に[Code]
を選択するとプログラムのコードを入力するtypeに設定できます(戻せます)。
コマンドモードでTypeがMarkdownのセルの内容が整形表示されている時、 そのセルをダブルクリックすることでMarkdownソースが表示されます。 この状態でさらにクリックすると編集モードになり、中身を編集することができます。
[Help]→[Markdown]
から少し辿った先のBasic writing and formatting syntaxにおおよその基本的な書き方を説明してあります。
またMarkdownという単語を検索すれば多数の説明が見つかるでしょう。
但しMarkdownには方言が多く、記述されている全ての機能がサポートされているとは限りません。
実際にそのように記述して表示されるかどうか試してみてください。
この資料のように元がJupyter Notebookであるとわかっているページなら
それを実現するMarkdownの記法があると考えられます。
例としていくつかの記法について述べておきます。
*イタリック*と**太字**です。
イタリックと太字です。
**太字中の_イタリック_と**、~~打ち消し線~~。
太字中の_イタリック_と、打ち消し線。
HTMLを使った<u>アンダーライン</u>と<font color="red">赤字</font>。
HTMLを使ったアンダーラインと赤字。
` ` ` (3連続`とすること)
int x;
x = x + 1;
` ` `
int x;
x = x + 1;
1. 番号付け。
1. 行頭の1は他の数字でも構いません。
1. 2レベル目
1. 2レベル目の2行目

カッコ内はURLあるいはサーバ内の相対パスです。 ファイルが存在しないと代替表示文字列が表示されます。
| 無指定 | 左詰 | 中央揃 | 右詰 |
|--------|:-----|:------:|-----:|
| n1. | l1. | c1. | r1. |
| n2. | l2. | c2. | r2. |
| $\int_1^2x dx$ | $\left(\begin{array}{cc}1&2\\3&4\end{array}\right)$ | <font color="red">赤</font> | **太字** |
無指定 | 左詰 | 中央揃 | 右詰 |
---|---|---|---|
n1. | l1. | c1. | r1. |
n2. | l2. | c2. | r2. |
$\int_1^2x dx$ | $\left(\begin{array}{cc}1&2\\3&4\end{array}\right)$ | 赤 | 太字 |
(数式部分については以下の$\mathrm{\LaTeX}$による数式入力の項目を参照してください。)
改行は行末の連続空白。
行末に空白を2つ入れています。
すると改行します。
空白を入れないとこの行のように前の行とつながります。
行末に空白を2つ入れています。
すると改行します。
空白を入れないとこの行のように前の行とつながります。
部分的に$\mathrm{\LaTeX}$形式で入力することも可能であり、基本的には数式部分をこれで記述します。ただし任意の$\mathrm{\LaTeX}$コマンドを利用できるわけではなく、ごく限られた命令しか使えません。例えば\usepackage
や\tabular
などは使えません。簡単な表がMarkdownの機能の方でサポートされています。\array
(の一部の機能)は使えます。
これらはMathJaxというライブラリを用いて実現されています。
$$\int x^3dx = \frac14x^4+C, \qquad A=\left(\begin{array}{cc}a&b\\c&d\end{array}\right)$$
$$\int x^3dx = \frac14x^4+C, \qquad A=\left(\begin{array}{cc}a&b\\c&d\end{array}\right)$$
<div style="text-align:center;">中央揃え</div>
<div style="text-align:right;">右揃え</div>
セルの編集が終わったら、[Shift]+[return]
により整形して表示するモードとして表示を確認します。
但し$\mathrm{\LaTeX}$やHTMLで記述してwebブラウザでうまく表示されても、 それらを後述の.htmlファイルや.texファイルに変換した場合にうまい具合に表示されるかどうかは やってみないとわからないところがあります。 HTMLで記述したものを$\mathrm{\LaTeX}$に変換するとうまく表示されない場合が多いようです。
右上にPython 3などと表示されている言語、つまりその時のkernelの言語でプログラム(の断片)を入力・編集し、やはり[Shift]+↩︎
により実行します。結果の値があれば入力部分のすぐ下に表示されます。ここにグラフ等の形で表示させることも可能ですが、その方法の説明はプログラミング入門の一部として扱うのが望ましいためこの資料では説明していません。予定では別の資料で説明します。
Notebookとしてこの資料を参照している場合、次のセルを選択して実行してみてください。HTMLファイルあるいはPDFファイルとして参照している場合には下記部分をnotebookにキー入力あるいはコピー&ペーストして入力して実行してみてください。どちらの場合にも内容を変更できるなら変更して再び実行してみてください。
# これはPythonのコード。例えばJuliaやRではimportの左に"#"を挿入し、math.を削除すると動作するはずである。
# 例: 2次方程式の解の一つ (Pythonの場合#から右側はコメント)
# ax^2 + bx + c = 0
import math # 数学函数(この場合sqrtのみ)を使うためにライブラリを読み込む
a = 1
b = 1
c = -1
(-b + math.sqrt(b**2 - 4*a*c))/(2*a)
Notebookの内容をJupyterサーバのファイルとして保存するには、[File]→[Save and Checkpoint]
を選択します。このようにするとその時のnotebookの名称のファイル名で保存されます。[File]→[Rename...]
により名称を変更しておくと後で参照したり整理したりする時に便利です。
編集・参照中のNotebookの利用を終了するには[File]→[Close and Halt]
を選択します。あるいはJupyterの最初のウィンドウで[Running]
タブをクリックし、Notebooksの当該notebookの[Shutdown]
ボタンをクリックします。後者の方法だと編集中のnotebookの内容が何も警告されずに消える場合があり得るので注意してください。
Jupiterの最初のウィンドウの[Files]
タブで当該ファイルをクリックすれば前回の編集・参照の続きを行えます。
Jupiterの最初のウィンドウの[Files]
タブで当該ファイルのチェックボックスをチェックし、[Duplicate][Rename][Move][Download][ゴミ箱アイコン]
などのうち表示されているものをクリックすることで各種ファイル操作を行えます。ダウンロードは.ipynb形式となります。
この節でnotebookのファイルを手元にダウンロードしたり逆にアップロードする方法を簡単に説明します。
Notebookの画面で[File]→[Download as]→[Notebook(.ipynb)]
を選択するとnotebookの内容をダウンロード・保存できます。
同様に[HTML(.html)]
や[LaTeX(.tex)]
を選択すればそれらの形式でダウンロードできます。ただし$\mathrm{\LaTeX}$形式の場合、そのままでは手元の$\mathrm{\LaTeX}$処理系でエラーが出る場合があります。具体的には画像ファイルを含める部分でエラーが出る時があり、その時にはそれらの部分を修正する必要があります。テキストエディタで画像の拡張子を探索して修正します。またwebブラウザによる表示やHTML形式の場合には問題なく変換されるが、$\mathrm{\LaTeX}$の場合にはうまくいかない他の場合として、各種ヘッダ(行頭の#,##など)やリストの前に空白行を一行入れてない場合があります(セルの冒頭を除く)。前述の中央揃えなど、HTMLを直接記述した場合にもうまくいかなかったりします。現状ではその他にも種々の問題点が残っており、$\mathrm{\LaTeX}$形式の場合にはダウンロード後にかなり編集しないとうまく動かない場合が多いです。しかしそういった問題を後で修正しても最初から$\mathrm{\LaTeX}$で入力するよりは楽な場合が多々あります。
他にいくつかの形式でダウンロードが可能になっています。 形式によりデータの一部がダウンロードされる場合があります。
メニューにPDF形式でのダウンロードの選択肢がある場合がありますが、日本語交じりのデータだと文字が出力されないことがあります。そういう場合にはwebブラウザのプリント機能等でPDFに変換するか、$\mathrm{\LaTeX}$形式でダウンロードして$\mathrm{\LaTeX}$処理系で変換するなどします。ただし上述した問題があるので、webブラウザを用いた方が無難でしょう。
Jupyterの最初の画面で右上の方の[Upload]
ボタンをクリックするとnotebook(.ipynb)形式のファイルをJupyterサーバにアップロードできます。
ローカルにJupyterサーバを動かしているとします。OSのメニュー等から起動した場合にはユーザのホームデリレクトリ内など、インストール時に指定した場所等がJupyterサーバのファイルの置き場所であり、コマンド・プロンプト等から起動した場合には起動時のカレント・ディレクトリ内となります。ファイルをダウンロード・アップロードする代わりにそれらの場所にあるファイルを直接読み書きすることも可能です。
Kernelを後から切り替えることも可能であり、notebookの[Kernel]→[Change kernel]
から選択します。言うまでもなくCodeのセルは、内容がkernelと合っていないと実行時にエラーが出ます。
Jupyterサーバ内でシェルコマンド(Windowsの場合は動作するコマンドがかなり異なります)を実行する方法として3つ挙げておきます。
[New]
に[Terminal]
という項目がある場合にはそれを選択する。# Pythonがkernelの場合には!の後のコマンドを実行する
! echo "A sample command."
# これは文字列をそのまま出力するコマンド。
# Julia kernelの場合。環境によっては動かないこともある。
run(`echo A sample command.`)
Jupyterサーバを停止するにはそのサーバで稼働している全てのnotebookをまず停止します(notebookの停止の項目を参照)。その後Jupyterサーバの動いているコマンド・プロンプトや仮想端末で[Ctrl]-C
を押します。すると例えば以下のように表示されます。
Shutdown this notebook server (y/[n])?
y↩︎
と入力するとサーバが停止します。その後ウィンドウを消します。
環境によっては尋ねずにいきなり停止する場合もあります。
[Ctrl]-C
を何度か入力しても有効でない場合にはウィンドウを消します。
ここから課題の前までの部分は他より少し難しく、課題を解くのに必要でもありません。そのため最初は必ずしも読まなくても問題ありません。また拡張機能がインストールされていなくて、管理者権限もない場合には当然使えません。BYODのPCなどで自分でJupyterをインストールした場合ならば下記の変更・追加・機能拡張が可能でしょうが、メディアセンタのPCなどの場合には可能でない場合があるので注意してください。
Notebookの見栄えを変更できます。これらの変更の一部はHTMLや$\mathrm{\LaTeX}$に変換した場合にも反映される場合があります。
ただしこの節を含めて後の部分はJupyterの拡張機能であり、教育用計算機システムなどの場合にはAnaconda等そのものはインストールされていても、 拡張機能の一部がインストールされていない場合や、 インストールされていてもうまく動作していない場合があり得ます。 そのような場合にその拡張機能を使いたければ、BYODのPCにAnaconda3と拡張機能をインストールして使用することを検討してください。
最も簡単にはwebブラウザの拡大縮小機能(ズーム)により大きさを変更できます。しかし後述のjt
コマンドをサーバで入力することでデフォルトのフォントサイズを変更できます。フォントサイズのみを変更できる場合には、そうした方が望ましい結果となる場合があります。
Jupyter-themesをサーバ(ローカルにサーバを動作させている場合にはローカルのPC)にインストールすれば色・フォントサイズ等を変更することが可能です。インストール方法と使用方法は基本的にはリンク先を見ていただきたいです。但し以下にインストール後の基本的な利用方法のみ書いておきます。ただし任意に色を設定しようと思うと設定ファイルの中身をいじる必要が出てきます。
注意点としては、これらの拡張機能のインストール時に、 Anacondaのインストール先によっては管理者権限が必要になる場合があることを挙げられます。 まだインストールされてなく、インストールに必要な権限がない場合には当然ながら以下の操作を行えません.
# Python kernelの場合。以下では!によりJupyterサーバでコマンドを動作させている
# サーバ側の環境が、これでjtが正しく動作するようになっている必要がある。
v = ! jt -l
# 利用可能なテーマのリスト(環境により異なる)。
v # ここではコマンドの実行結果を一旦Pythonの変数に代入しているが、! jt -lとしてもよい。
# あるいはコマンドプロンプトや仮想端末で左端から!までを除いて実行する。
# 以下の結果はインストールされているテーマ(.lessファイル)によって変わってきます。
! jt -t solarizedl -T -cellw 1150 # テーマの設定。ただしnotebookの再起動後に反映される。
fs = 12 # フォントサイズ等も設定する。{}内はPythonの式として計算され置き換えられる。
! jt -t solarizedl2 -T -cellw '100%' -fs {fs} -nfs {fs} -tfs {fs} -dfs {fs} -ofs {fs}
# jtやjupyterのバージョンと.lessファイルの不整合によってエラーが出る場合があります。
! jt -r # リセット。元々のテーマに戻す。
# Julia kernelの場合の例。環境によっては動かないこともある。
# そのような場合には一時的にkernelをPythonに切り替えて上の方法で実行する。
run(`jt -l`)
-P
オプションを付けるとセルの左側の領域が出なくなります。
ただしこうすると特にHTMLに変換した場合、CodeセルとMarkdownセルの違いを見分けにくくなります。
-cellw "100%"
などと比率でページ幅を指定するとwebブラウザのウィンドウ幅に従って改行位置が変わります。
-cellw 1150
などとピクセル数で指定することもできます。
# jtの使い方とオプション一覧の表示
! jt --help
ここではJupiterの機能を拡張するための方法としてkernelの追加とextensionの追加について簡単に説明します。
注意点としては、これらの拡張機能のインストール時に、 Anaconda等のインストール先によっては管理者権限等が必要になる場合があることを挙げられます。
Jupyterでは前述のようにnotebook単位でkernelを切り替えて使うことができます。しかしJupyterサーバにインストールされていないkernelの言語は実行することはできません。メニューの[New]
や[File]→[New Notebook]
、[Kernel]→[Change Kernel]
で出てくるものがインストールされているkernelになります(もちろんうまくインストールされていなければ動作はしません)。
新しくカーネルをインストールするにはJupyter kernelsを参照してインストールを行います。場合によってはそうしなくてもGUIでワンクリックでインストールできるようになっているkernelがある場合もあります。また自分で新しいカーネルを作ることも可能です。ここではそれらについては詳しくは説明しません。
現在はnotebookごとにプログラミング言語を一つ1指定して使うようになっていますが、Pythonの場合には行頭の!により(bashなどの)シェルコマンドを利用することができます。これは言ってみれば複数言語を切り替えて利用しているわけです。特別なkernelとして複数のkernelを切り替えてプログラムを実行するようなものを作れば複数言語対応のnotebookを実現できるはずです。
Jupyter notebook extensionsという、Jupyterの機能を拡張するためのソフトウェアが公開されています。これのインストールと利用方法についても基本的にはリンク先を参照してください。複数あるインストール方法のうちでは、condaによるものが、比較的新しい版の拡張がインストールされるようです。ただしうまくインストールされない場合には他の方法を試してください。
個々のextensionのon/off等はサーバの仮想端末等からコマンドで行うこともできますが、Jupyter Nbextensions ConfiguratorもインストールしてJupyterの最初の画面に[Nbextensions]というタブ([Clusters]タブの右隣)を出すように設定すれば、後は個々の機能拡張のon/offとパラメータの設定をwebブラウザから簡単に行えるようになります。
少々残念なことに、PythonやJupyterの版によって互換性が保証されているextensionとそうでないものがあります。
Jupyterを用いてプレゼンテーションを行う方法は大きく分けて3つあります。
jt -T -cellw "100%" ...
などとしてウィンドウ幅により改行位置が変わるようにしておく。[Help]→[Edit Keyboad Shortcuts]
によりtoggle toolbarのショートカットを設定する。こうするとスクロールできるので用途によって、 あるいはセルをページごとに区切っていない場合に適しています。 また、HTMLファイルに変換した後もブラウザを同様に操作すればプログラムの実行や 即時変更以外のプレゼンテーションを行えます。 ただし1の方法ではキー一つでページを行き来したりはできません。
2. Jupyterの拡張機能を使う方法。通常のプレゼンテーションソフトウェアに近い操作を行えます。
$\bullet$ RISE
$\bullet$ nbpresent
3. Notebookをプレゼンテーション用のデータに変換して使う方法。
4. HTMLファイルに変換し、ブラウザの表示拡大機能を利用して表示します。
ブラウザの上の部分は、ブラウザの表示設定によりできるだけ小さくします。
ただし、ブラウザの幅の変化によって改行位置が変わるようなHTMLファイルになるように指定する必要があります。
4の指定にはjtコマンドを使います。上のjtコマンドの説明を参照してください。 jtコマンドがうまく動作せず、ページ幅が一定になるようにしかできない場合、4はうまくいきません。
以下はそれらのうちの一つ、RISEを使う場合の簡単な説明です。
まずRISEをインストールします。この作業はJupyterのインストールに対して一回行います。
# Python kernelの場合。
# anacondaを共通領域に管理者権限等でインストールした場合には以下の操作はbashから管理者権限等で行う(!なし)。
! pip install RISE
! jupyter-nbextension install rise --py --sys-prefix
! jupyter-nbextension enable rise --py --sys-prefixtttt
RISEをインストールした時には、現在開いているnotebookの内容を(必要なら)保存して、notebookを閉じ、再び開きます。あるいは他のnotebookを開きます。Jupyterのversionによってはサーバの再起動が必要な場合もあるようです。Toolbarの右の方に棒グラフのアイコンのボタンが現れます。Nbextensions ConfiguratorによるとRISEの互換性が確認できないとのことですが、試してみたところそれほど問題ないようです。
RISEを使ってプレゼンテーションを行うには、まずセルごとのスライド属性を設定します。[View]→[Cell Toolbar]→[Slideshow]
を選択すると各セルの右上でSlide Tpye
を選択できるようになります。
この表示は同じく[None]
を選択すれば消えます。
- | Slide | Sub-Slide | Fragment | Skip | Notes |
---|---|---|---|---|---|
上のスライドの続き | 新しいスライド | 新しいサブスライド | 追加で下に表示 | 表示しない | ノート |
「-」はセルは別だが上と同じスライドとする場合に選択します。 「Sub-Slide」だとプレゼンテーション時に次のスライドを表示するSpaceや→では表示されなくなり、 別のキー操作で表示されるようになります。要するに見せるか見せないか状況に応じて簡単に選択できるスライドとなります。 「Fragment」は上のセルを表示している下に追加で表示されるようになります。
注意すべきなのは、表示の最小単位がセルであることです。 一つのセルが大きくて画面をはみ出すとスクロールが効かないため縮小表示しか表示手段がありません。 これはHTMLファイルの生成とプレゼンテーション資料作成に同じnotebookを使う場合、多少不便な場合があります。 番号付きリストが長い場合にもセルを分けなければならず番号付がうまくいかなくなります。 しかし現状そうなっています。 RISEでも指定によりスクロールが効いたりセルを分割してスライドにできたりすればよい気がします。 Split Cells Notebookというextensionと併用するとダブルコラムの表示にできますが、 プログラムの出力の画像の表示等の幅が狭くなりすぎる場合があるようです。
プレゼンテーションを行うには、なるべくならフルスクリーンモードにできてタイトルバー等を全て隠せるwebブラウザを使います。 例えばChromeやSafari等です。 FirefoxをMacで使う場合にはプラグインが必要です(Old Lion Fullscreenなど)。 そのようにした上でToolBarの棒グラフのアイコンのボタンをクリックするとプレゼンテーションモードが始まります。 カーソルキーあるいは右下のボタンのクリックでスライド間を移動できます。 左下にhelpのボタン「?」、左上にプレゼンテーションモード終了ボタン「x」があります。 文字の大きさの設定はブラウザの機能で行えます。