おわび
このページを開くと「こんにちは」と出たと思いますが、記事の中にJavaScriptを動かすマジックコマンドを書いている為に出たものです。先におわび申し上げます。
はじめに
Jupyter Notebookにはmagic commandという機能がついています。
便利そうですのでちょっと触ってみてどういうものなのか書こうとおもいます。
タイトルを基礎なんて銘打ってますが、コンピューティングの基礎がまるでわかってないので察してくださいませ( ^∀^)
目次
作業環境
IPython公式
Built-in magic commands — IPython 7.8.0 documentation
によると、
IPython(やJupyter Notebook)についている機能で、IPythonのカーネルによって実装・提供されている。
使い方としてはコードセルで%や%%の後に続けて特定のコマンドを記入し、セルを実行するとそのコマンドが実行できる。
わざわざターミナルを立ち上げなくてもセル上でコマンドが実行できるという所が便利。
使えるマジックコマンド一覧の表示方法
星の数ほどあるコマンドを無限に使えるわけではなさそう。(でも拡張機能があるみたい。ここでは触れない)
マジックコマンドはIPythonカーネルに組み込んであり、それに依存しています。なるほど。
何のコマンドが使えるのかな?
一覧を表示するマジックコマンドが次。
セルをCodeタイプにして、↓の文字列を書いて、QPyNotebookでセルを実行してみます。
%lsmagic
Available line magics:
%alias %alias_magic %autocall %automagic %autosave %bookmark %cat %cd %clear %colors %config %connect_info %cp %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %killbgscripts %ldir %less %lf %lk %ll %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %lx %macro %magic %man %matplotlib %mkdir %more %mv %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %popd %pprint %precision %profile %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %rm %rmdir %run %save %sc %set_env %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode
Available cell magics:
%%! %%HTML %%SVG %%bash %%capture %%debug %%file %%html %%javascript %%js %%latex %%markdown %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile
Automagic is ON, % prefix IS NOT needed for line magics.
一覧が表示されました。
大きく別けて、
- Available line magicsという
%が一つ付いたもの %%のAvailable cell magics
があるようです。
試しに、次は同じものをPydroid3のjupyter notebookで実行。
%lsmagic
Available line magics:
%alias %alias_magic %autoawait %autocall %automagic %autosave %bookmark %cat %cd %clear %colors %conda %config %connect_info %cp %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %killbgscripts %ldir %less %lf %lk %ll %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %lx %macro %magic %man %matplotlib %mkdir %more %mv %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %pip %popd %pprint %precision %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %rm %rmdir %run %save %sc %set_env %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode
Available cell magics:
%%! %%HTML %%SVG %%bash %%capture %%debug %%file %%html %%javascript %%js %%latex %%markdown %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile
Automagic is ON, % prefix IS NOT needed for line magics.
出力結果が若干違うっぽい。
環境によって使えるコマンドが変わる。「それぞれのIPythonカーネル固有のマジックコマンドに限定されている」と上に貼ったurlこちら ipythonにあります。
下のPydroid3の方はpipコマンドが使えるみたい。
セルで即座にモジュールのインストールができるんですかね。しゅごい…
%と%%の違い
%が一つのAvailable line magicsと、%%のAvailable cell magicsは何が違うんだろう?
%line magicsは、コマンドを書いたその一行だけ魔法が発揮され、%%cell magicsはセル内の全ての行で魔法を発揮する。
使用法の表示 「?」
マジックコマンドの後に?を一つ付けると、そのマジックコマンドのdocstringが表示される。
docstringとは
関数やクラスの定義したあとの一行目からトリプルクォート"""で囲んで書かれた、関数やクラスの仕様や使用方法の説明書き。
初心者はこれをhelp()関数を使うなどして読んで勉強するのがいいんでしょうけど、如何せん全て英語でツラい…
docstringを書いておけば、Sphinx等のドキュメント自動生成ツールでPythonの公式ページやWikipediaみたいなのがサクッと出来上がるらしいのですが、如何せんドキュメントを書く程のプログラムを作る能力がないのと、面倒なのと…
docstringについて参照
[https://note.nkmk.me/python-docstring:embed]
[https://qiita.com/simonritchie/items/49e0813508cad4876b5a:embed]
[https://code-graffiti.com/docstring-in-python:embed]
[https://python.atelierkobato.com/help:embed]
話しを「?」に戻します。
マジックコマンド?でこのdocstringが表示できる。
やってみます。
%alias?
pydroid3のjupyter notebookで実行すると、Jupyter Pagerなるものが立ち上がり、ブラウザの別ページでdocstringが表示されました。
↓ 画面の写真

ソースコード表示 ??
マジックコマンド??でソースコードが表示される。割愛。
Magic Commandを試す
いくつか使ってみる。
作業ディレクトリ確認のマジックコマンド
Linuxコマンドでカレントディレクトリを取得するにはターミナルでpwdと入力実行しますが、それと同じ。
%pwd
'/storage/emulated/0/qpython/notebooks'
QPyNotebookのデフォルトのディレクトリで作業中(*σ´ェ`)σ
フォルダ作成マジック
%mkdir Magic_Command
mkdir: 'Magic_Command': File exists
2回実行したので「すでに存在している」と言われた。
移動マジックと作業ディレクトリ表示マジック
複数のマジックコマンドいけるか?
移動し、カレントディレクトリ表示。
%cd Magic_Command %pwd
/storage/emulated/0/qpython/notebooks/Magic_Command
'/storage/emulated/0/qpython/notebooks/Magic_Command'
移動した時点で表示されました。
Pythonファイルの実行マジック
Pythonスクリプトを書いて保存し、マジックコマンドで実行してみる。
# Pythonのコード janken_code = """ import random lst = ["✊","✌️","✋"] print(random.choice(lst)) """ # 上のコードをファイルに新規保存 with open("janken.py","w") as f: f.write(janken_code)
# ディレクトリ内容物表示
%ls
janken.py
Pythonファイルが作成されている。
ファイルの中身を見てみます。
# janken.pyの中身を見る
%cat janken.py
import random
lst = ["✊","✌️","✋"]
print(random.choice(lst))
ちゃんと書かれています。
そしたら、ファイルを実行してみよう。
# Pythonファイルを実行
%run janken.py
✌️
↑ ターミナルを立ち上げなくともJupyterからファイルが実行できてしまう。
なんと便利なんだ!
ちなみに↑のコードは実行するたびに出力が変わります。
Jupyter Notebookのセルに書いたPythonのコードを、上のようにわざわざopen()関数で保存したりせずとも、コードセルを.pyファイル(julia、R、markdownなども可)で保存する超便利な方法があるようです。
↓
(番外編)Jupytextモジュール
参考ページ。
[https://github.com/mwouts/jupytext:title]
日本語でインストールから使い方まで載せてあります。
[https://qiita.com/cfiken/items/8455383f32ee19dfbba3:title]
グラフ/イメージ表示
%matplotlib
Jupyter Notebookのマジックコマンドで最もポピュラーなのではなかろうか。知らんけど。
だいたい解説書とかで最初に出てくる。
棒グラフを表示させてみる。
%matplotlib inline import matplotlib.pyplot as plt members = ["A", "B", "C", "D", "E"] x = range(5) y = [81, 98, 42, 73, 54] # 棒グラフを描画する plt.bar(x, y, tick_label = members) plt.show()

マジックコマンドの実行履歴
実行すると履歴を表示。
%history
(番外編)リダイレクトを試す
コマンドのリダイレクトを使って、出力結果をファイルに書き出せるか試す。
%catで先ほど作成保存したjanken.pyなるファイルを文字列で読み込み、リダイレクト>でoutput.txtなるテキストファイルに書き出す。
%cat janken.py >output.txt
実行した。
できているか確める。
%ls %cat output.txt
janken.py output.txt
import random
lst = ["✊","✌️","✋"]
print(random.choice(lst))
OK👌
%lsmagicをリダイレクトでファイルに書き出したいのだけど、この方法では上手くいかなかった。理由はわからない。
%%html
%%html
<script>
alert("こんにちは");
</script>
実行すると何か出る。
%%markdown
%%markdown ~~失言~~
失言
その他、参照
各々のマジックコマンドがどんなものなのかを、ざっと表にした。
具体的な使用法はIPythonのオフィシャルページで見てください。
https://ipython.readthedocs.io/en/stable/interactive/magics.html
| マジック コマンド |
動作 |
|---|---|
| %alias | コマンド名を 置き換える |
| %alias_magic | マジックコマンドを 別名に置き換える |
| %autocall | 括弧を付けずに関数の 呼び出しを可能にする |
| %automagic | マジックコマンドを %無しで呼び出せる設定 |
| %autosave | 自動保存の設定 |
| %bookmark | IPythonの ブックマーク機能 |
| %cat | ファイルの読み取り |
| %cd | ディレクトリの移動 |
| %clear | 画面のバッファをクリア |
| %colors | プロンプト、情報システム 例外ハンドラーの配色を 切り替え |
| %config | IPythonを構成システム を表示 |
| %connect_info | IPythonとの接続データ の取得 |
| %cp | コピー |
| %debug | 対話型デバッガのオン |
| %dhist | ディレクトリの 移動履歴 |
| %dirs | カレントディレクトリの スタックを表示 |
| %doctest_mode | doctestモードの オンオフ切り替え |
| %ed | %editのエイリアス。 ショートカット |
| %edit | viかメモ帳のエディタ起動 でファイルを編集 |
| %env | 環境変数を表示 |
| %gui | IPython GUIのイベントループ 統合のオンオフ |
| %hist | %historyのショートカット |
| %history | マジックコマンドの 実行履歴 |
| %killbgscripts | %%script等により 開始された全ての バックグラウンドプロセス を強制終了 |
| %ldir | 特定の%lsのショートカット |
| %less | 一画面ずつ表示 |
| %lf | 特定のlsコマンドの ショートカット |
| %lk | 上に同じ |
| %ll | 上に同じ |
| %load | フロントエンドにコードを ロードする |
| %load_ext | マジックコマンドの 拡張機能の読み取り |
| %loadpy | 拡張機能の名前変更 |
| %logoff | ログ出力の停止 |
| %logon | ログ出力の再開 |
| %logstart | IPythonへの入力内容の ログ出力を開始 |
| %logstate | ログ出力状況表示 |
| %logstop | IPythonへの入力内容の ログ出力を停止 |
| %ls | ディレクトリの中身表示 |
| %lsmagic | 使えるマジックコマンド 一覧表示 |
| %lx | 特定のlsコマンドの ショートカット |
| %macro | 再実行の為のマクロを 定義する |
| %magic | マジック関数システム に関する情報を出力 |
| %man | コマンドのマニュアル表示 |
| %matplotlib | グラフやイメージの 表示設定 |
| %mkdir | ディレクトリの作成 |
| %more | 一画面ずつ表示 |
| %mv | ファイルやディレクトリの 名前変更や移動 |
| %notebook | IPython notebookを エクスポート及び変換する |
| %page | オブジェクトを綺麗に プリントしページャーで 表示する |
| %pastebin | dpasyeの貼り付けビンに コードをアップロードし URLを返す |
| %pdb | pdbインタラクティブ デバッガの自動 呼び出しの制御 |
| %pdef | 呼び出し可能なオブジェクトの 呼び出し著名を出力する |
| %pdoc | オブジェクトのdocstring を表示 |
| %pfile | 対象オブジェクトの ファイル内容表示 |
| %pinfo | 対象オブジェクトの 概要表示 |
| %pinfo2 | オブジェクトに関する追加の 詳細情報を提供する |
| %popd | スタックの一番上の ディレクトリに移動する |
| %pprint | プリティプリントの オンオフ |
| %precision | プリティプリントの 浮動小数点精度を設定 |
| %profile | %prunにより使われるコードのプロファイル |
| %prun | Pythonコードプロファイラー でステートメントを実行 |
| %psearch | ワイルドカードで名前空間の オブジェクトを検索 |
| %psource | オブジェクトの ソースコード表示 |
| %pushd | 現在のディレクトリを スタックに配置し ディレクトリを変更する |
| %pwd | カレントディレクトリ表示 |
| %pycat | 構文が強調されたファイル を表示する |
| %pylab | numpyとmatplotlibを ロードしインタラクティブに 動作させる |
| %qtconsole | GUIのqtconsole起動 |
| %quickref | マジックコマンドなどの 簡単なリファレンス表示 |
| %recall | コマンドを繰り返すか 編集入力行にコマンド取得 |
| %rehashx | $PATHの全ての実行可能 ファイルでエイリア ステーブルを更新する |
| %reload_ext | モジュール名でIPython 拡張機能をリロード |
| %rep | %recallのショートカット |
| %rerun | 直前のコマンドを再実行 |
| %reset | 宣言した変数を削除 |
| %reset_selective | 名前空間のリセット |
| %rm | ファイルの削除 |
| %rmdir | ディレクトリの削除 |
| %run | ファイルの実行 |
| %save | 特定ファイルに一連の 行またはマクロを保存 |
| %sc | シェルの実行結果を キャプチャ |
| %set_env | 環境変数の設定 |
| %store | 保存された全ての変数を表示 |
| %sx | シェルコマンドを実行し 出力をキャプチャする |
| %system | シェルコマンドを実行し 出力をキャプチャする |
| %tb | トレースバックを 表示 |
| %time | 実行に掛かった 時間の測定 |
| %timeit | 実行時間の測定の ベストタイムを表示 |
| %unalias | エイリアスを削除 |
| %unload_ext | モジュール名で拡張 機能をアンロードする |
| %who | 宣言されている変数や 関数等の名前を表示 |
| %who_ls | 宣言されている変数や 関数等の名前を リストで表示 |
| %whos | 宣言されている変数や 関数等の名前を一覧表示 |
| %xdel | 変数を削除し、IPythonが 参照している場所から 変数をクリアする |
| %xmode | 例外ハンドラーのモード切替 |
| %%! | システムコマンド (シェルコマンド)を実行 |
| %%HTML | セルをhtmlブロックとし レンダリングする |
| %%SVG | セルをSVGブロックとし レンダリングする |
| %%bash | サブプロセスでbashを 使用してセルを実行 |
| %%capture | セルを実行し、stdout、 stderr及びIPythonの display()呼び出しを キャプチャする |
| %%debug | 対話型デバッガ |
| %%file | %writefileコマンドの ショートカット |
| %%html | セルをhtmlのブロックとし レンダリングする |
| %%javascript | JavaScriptのセルブロック を実行する |
| %%js | 上に同じ |
| %%latex | セルをラテックスの ブロックとしてレンダリングする |
| %%markdown | セルをマークダウンの ブロックとしてレンダリングする |
| %%perl | サブプロセスでperlを 使用して実行する |
| %%prun | Pythonコードのプロファイラーで ステートメントを実行する |
| %%pypy | サブプロセスでpypyを 使用してセルを実行する |
| %%python | サブプロセスでpythonを 使用してセルを実行する |
| %%python2 | サブプロセスでpython2を 使用してセルを実行する |
| %%python3 | サブプロセスでpython3を 使用してセルを実行する |
| %%ruby | サブプロセスでrubyを 使用してセルを実行する |
| %%script | シェルコマンドを使用して セルを実行する |
| %%sh | サブプロセスでshを使用して セルを実行する |
| %%svg | セルをSVGリテラルとして レンダリングする |
| %%sx | シェルコマンドを実行し 出力をキャプチャする |
| %%system | 上に同じ |
| %%time | 実行時間の測定 |
| %%timeit | 実行時間を数回測定し最小値を返す |
| %%writefile | セルの内容をファイルに書き込む |
表の一番したにある%%witefileなんて、すごく便利そうじゃない?
以上です。