Pythonista 3にシェル、Dropbox同期・ダウンロード機能などAppleが許さない機能を追加する
2019/12/01
価値ある情報をユーザー視点で発信するブログ
2019/12/01
iOS最強の統合開発環境Pythonista 3。
開発言語はPython 3.5 / 2.7。iOSとの親和性が高く、単にPythonが書けるというだけでなく、iOSの開発環境として機能します。
2008年から始まったApp Store史上、僕が最高に興奮を覚えたアプリです。日本ではそれほど人気がない一方で、海外での絶賛っぷりが対照的です。
Pythonista 3
カテゴリ: Productivity
販売元: Ole Zorn(サイズ: 244.4 MB)
全てのバージョンの評価: (0 件の評価)
こんなエントリを見にくる人がPythonista 3を知った時に覚える感慨に「よくAppleが許したな」、「よくAppleが審査通したな」というものがあるでしょう。
App Storeサービスイン当初にAppleが規約に盛り込んだインタプリタ禁止条項は、このようなアプリが世に出ることを許さなかったからです。
2008年のことですが、鮮烈に覚えている人が多いようで、このような文脈で語る人が後を絶ちません。
インタプリタ禁止条項は、その2年後の2010年9月に解除になっています。したがって、それ以降からiOS上のセルフ開発環境はたくさんリリースされています。
ただし、「いかなる方法でもコードのダウンロードを禁止する」という条項が残っており、それが今に至るもインタプリタを搭載したアプリの可能性を縛っています。
コミュニティと結び付くことで多くのユーザーを抱えるようになった教育用プログラミング言語Scratchが、iOS上で本来の姿を取れないのは、この条項のせい。
Scratch Kids Lite
カテゴリ: Education
販売元: David Phillips(サイズ: 93.8 MB)
全てのバージョンの評価: (0 件の評価)
Pythonista 3もその規約の制約下にあり、Pythonista 1.x時代はあったスクリプトのDropbox同期機能がPythonista 2へのメジャーアップデート時に削除されました。
実際、このDropbox同期機能は便利でした。PythonistaからDropbox同期機能がなくなったとき、大きな喪失感を覚えました。
喪失感っていうとなんだか悠長ですね。実際困りました。
Pythonという一般的な言語がそのままの形でiOS上で動作するということは、他環境で作った、使っていたスクリプトを、そのままiOS上に持っていけるということ。
Dropbox同期機能があれば、どれほど便利かは容易に想像が付くでしょう。
もくじ
Pythonistaはまがりなりにも開発環境です。
しかも、標準添付のモジュールにdropboxもある。
これはすなわち、Pythonista 2から失われたDropbox同期機能を、ユーザーサイドで後付けできるということを意味します。
そのような必要性と環境の助けで作られたDropboxSync.pyというPythonista用のスクリプトが存在します。これは、DocumentsフォルダのDropboxとの同期を可能にします。
Dropbox上の任意のファイルをPythonistaのDocumentsフォルダにダウンロードしてくるDropbox File Picker.pyというスクリプトも存在します。これは、Pythonista 3の開発者Ole Zorn氏が作られたもの。
これを導入すると、Pythonista 3の作業環境としての快適性は大幅に向上します。
そして、Pythonistaにない、シェルを追加する大技ありのスクリプトStaShというものが存在します。
PythonistaにはPythonインタプリタと対話できるインタラクティブコンソールがありますが、それとは別にシェルを追加するのです。
これまたとんでもないもので、Pythonista 3のObjective-Cとのブリッジ機能を活用し、Pythonista 3自身を拡張する形で動作します。
Pythonista 3は別に仕様をオープンしているわけでもAPIを公開しているわけでもありません。Pythonista 3をリバースエンジニアリングして作られています。
Pythonista 3には、Pythonista 3の合法ドラッグのような危険な魅力を嗅ぎ付けてきた、このような黒魔術を使うユーザーが集っていてなかなか楽しいのです。
StaShは、Pythonista 3のタブ内でターミナルエミュレータとして動作する部分と、その中で動作するコマンドから成る、一つのCUI作業環境です。Windows 10における「Windows Subsystem for Linux」のようなものというと言い過ぎかもしれませんが、StaShをPythonistaにインストールすると、pip、git、ls、rm、cd、pwd、wget、curl、telnet、ssh、scpなどなど、普段我々がPC/Mac上で使っているおなじみのコマンドがPythonista 3上で使えるようになります。
manもあります。「man pip」とすれば、簡単なマニュアルが表示されます。
マニアックなところでは、macOSユーザーにはおなじみのpbcopy、pbpasteなども移植されています。
前置きが大分長くなりましたが、Pythonista 3の作業環境を大幅に改善するDropbox File Picker.py、DropboxSync.py、StaShをPythonistaにインストールする方法を紹介します。
これで、Pythonista 3の真の姿が覚醒します!
まずは、DropboxSync.pyなどをインストールするときにも便利に使えるStaShからインストールします。
インストール方法は非常に簡単。Pythonista 3のインタラクティブコンソールに次の1行をコピペしてenter。
import requests as r; exec(r.get('http://bit.ly/get-stash').text)
これでStaShのzipがダウンロードされ、展開されます。macOSのHomebrewを連想した人も多いのではないでしょうか。
Pythonista 3の再起動が促されるので、iOSデバイスのHomeボタン2度押しからPythonist 3を上スワイプでいったん終了させ、再度起動します。
しかる後に、launch_stash.pyをファイルリストからタップして開きます。
コードエディタ画面右上のレンチアイコンをタップし、区切り線の右端にある「Edit」をタップして「+」アイコンをタップ。「Custom Title」を「StaSh」にして「Done」ボタンをタップ。
これで、コードエディタを使用している最中にレンチアイコンからStaShがすぐに起動できるようになりました。
レンチアイコンをタップし、登録した「Stash」アイコンをタップしてStaShを起動。
Stashを起動したらdev版にアップデートします。安定版は2016年以降更新がありませんが、dev版はマメに更新されています。
selfupdate dev
「help」で使用可能なコマンド一覧が表示されます。
複数起動可能で、起動するごとにStaShのタブが増えていきます。
レンチメニューの「Home Screen」から、Home画面に登録することもできます。
今度はDropbox File Picker.pyをインストールします。
多少直すところがあったので僕のgistに登録したものを使います。
以下のテキストエリア内のテキストを全選択してコピー。
Pythonista 3内でStaShを起動し、ペースト。これで、wget.pyによるダウンロードが完了するはずです。
Dropbox File Picker.pyで必要なトークンを取得します。
以下のページにDropboxにログインした状態でアクセス。
「Create app」ボタンをクリック。
「Generate access token」のところの「Generate」ボタンを押し、トークンを生成。
生成されたトークンをコピーしてPythonistaに持っていきます。僕はEvernote経由で持っていきました。
取得したトークンをDropbox File Picker.pyに転記します。
ダウンロードしたDropbox File Picker.pyをファイルリストからタップしてコードエディタで開き、スクリプト冒頭の以下の部分の「YOUR_TOKEN_HERE」を、取得したトークンに書き換え。
TOKEN = 'YOUR_TOKEN_HERE'
続いて、画面右上のレンチメニューをタップして、StaShでやったようにアイコン登録します。僕は「DBPicker」という名前で登録しました。
登録が終わったら、レンチメニューに登録したアイコンから実行してみます。
Dropbox上のファイルリストが表示されたらOKです。Dropbox File Picker.pyはまた、TableViewの使い方のいいサンプルになっています。
ファイルをタップするとダウンロードが始まり、Documentsディレクトリのルートにダウンロードされます。
Pythonistaで動かすPythonスクリプトのみならず、Pythonistaに処理させたいファイルをダウンロードできるところに、大いなる可能性が感じられます。
続いて、DocumentsディレクトリをDropboxと同期できるDropboxSync.pyのインストールです。
Dropbox File Picker.pyの解説冒頭でやったwgetで既にファイルはダウンロードしているので、ファイルリストからDropboxSyncv2.pyを選んでコードエディタで開きます。
本家はDropbox側のAPIの変更などで動かなくなっているので、Forkされたもの(DropboxSync.py → DropboxSyncv2.py)を使います。それだけでは動かない部分があったので、僕の方で修正を加えています。
DropboxSyncv2.pyは、dropboxloginv2.pyという別のスクリプトに依存しており、それも同時にダウンロードしています。
DropboxSyncv2.pyで必要なApp keyとApp secretを取得します。
以下のページにDropboxにログインした状態でアクセス。
「Create app」ボタンをクリック。
「App key」と「App secret」をコピーしてPythonistaに持っていきます。僕はEvernote経由で持っていきました。
取得した「App key」と「App secret」をDropboxSyncv2.pyが依存するdropboxloginv2.pyの方に転記します。
もう一度書きます。DropboxSyncv2.pyじゃなくて、dropboxloginv2.pyの方に「App key」と「App secret」を転記します。
dropboxloginv2.pyをファイルリストからタップしてコードエディタで開き、スクリプト冒頭の以下の部分の「YOUR_APP_KEY」と「YOUR_APP_SECRET」を、取得したものに書き換え。
app_key = 'YOUR_APP_KEY' app_secret = 'YOUR_APP_SECRET'
続いて、DropboxSyncv2.pyの方をコードエディタで開き、画面右上のレンチメニューをタップして、StaShでやったようにアイコン登録します。僕は「同期」という名前で登録しました。
登録が終わったら、レンチメニューに登録したアイコンから実行してみます。
すると、Dropboxへのログインが促され、ログインを終えるとアクセス許可が促されます。「許可」をタップ。
するとアクセストークンが発行されるので、これをコピー。アクセストークンを選択するのに結構難儀すると思います……。Dropbox File Picker.pyと同様に、Dropboxのサイト内でアクセストークンを生成して、それを使う形にしたら楽ですよね……。
Webビューを左上の「×」で閉じて、インタラクティブコンソールに取得したアクセストークンをペーストし、enterキーを押します。
これで、同期が始まるはずです。
StaSh、Dropbox File Picker.py、DropboxSync.pyを導入したPythonista 3は、水を得た魚のように活躍を始めるでしょう。
これがないPythonista 3など考えられないほどです。
ぜひ、お役立てください。
Pythonista 3
カテゴリ: Productivity
販売元: Ole Zorn(サイズ: 244.4 MB)
全てのバージョンの評価: (0 件の評価)