この記事は、Pythonista3 Advent Calendar 2022 の26日目後夜祭です。
一方的な偏った目線で、Pythonista3 を紹介していました。
あ、どうも。(自称)iPhone でのコーディング時間世界一を名乗らせてもらってもらっている者です。どうぞよろしくお願いします。
アドカレ参加によりひとりで25日分の記事を書きました。結果としてiPhone でのコーディング時間世界2位の方と差が広がる一方です(2位とは?)。
以下、私の2022年12月時点の環境です。
--- SYSTEM INFORMATION ---
* Pythonista 3.3 (330025), Default interpreter 3.6.1
* iOS 16.1.1, model iPhone12,1, resolution (portrait) 828.0 x 1792.0 @ 2.0
他の環境(iPad や端末の種類、iOS のバージョン違い)では、意図としない挙動(エラーになる)なる場合もあります。ご了承ください。
ちなみに、model iPhone12,1
は、iPhone11 です。
この記事でわかること 🥸
-
Pythonista3 Advent Calendar 2022 の振り返りとサマリー
- 使用モジュール
- おすすめ度
- iPhone でコーディングをしていくことについて
振り返りとサマリー 📝
完走した感想ですが、疲れました 😇
一日一日、ていねいなかんそう。としようとしましたが、クッソ長くなりそうなので、続きものはマージさせています。
day00
- タイトル:
- 概要: Qiita API v2 を使って、tags の情報を取得するやり方。また、Pythonista3 上で取得した情報の加工。
- 使用モジュール:
- おすすめ度: ★★★☆☆
振り返り(独り言)
本編25記事中、7記事目あたりで「前夜祭も書いたろ!」と思いつき執筆開始。
普段はAPI を叩くことをしない(ギガが無くなるのが怖い)ので、調べては実行を繰り返してコードが完成。いまだにAPI の使用上限にドキドキするし、トークンをどこに格納するのがベストか悩んでいる。
「1〜7日目の記事と文体が違うんだよなぁ」と一丁前にトンマナが気になり出し、書き溜めている記事と見比べるなど無駄な時間が多かった。
抽出した記事では、過去に読んでいなかったり、素敵な記事を思い出したりと一括で取得することで見えてくるものもあるなぁとしみじみ。
記事の頭の方に、執筆中のキャプチャGIF を載せて、頑張っている雰囲気をだしている(Pythonista3 での入力画面)。
day01 | day02
- タイトル:
- 概要: 普段Pythonista3 を使うにあたり、自分自身が行っていることや感じていることをPythonista3 の機能とともに紹介
- 使用モジュール:
- 特になし
- おすすめ度: ★★★☆☆
振り返り(独り言)
Documentation はあれど、機能だし、英語だし、、、と、全てはカバーしきれないけども「こんな機能があるんやでー」的に紹介。
「何か困ったら公式のリファレンスを読む」ムーブをPythonista3 で勉強させていただきました☺️ とはいえ、Qiita や個人ブログからの公式リファレンスの導線って大事ですわね。
テキストエディタ大好き感情を抑え込むことができず、支離滅裂な思考・発言が目立つ。
Pythonista3 とは?」といった丁寧でわかりやすい記事は、たくさんあるので下位互換を2022年年末に産み落とさないように気をつけ、は、した。つもり。
day03 | day04
- タイトル:
- 概要: iPhone でコーディングをする際の、普段使いの便利スクリプトたちを紹介している
- 使用モジュール:
- おすすめ度: ★★★★☆
振り返り(独り言)
👩 「えーマジ?iPhone でコーディング!?キモーイ」
👧 「iPhone でコーディングが許されるのは小学生までだよねー」
👩 & 👧 「キャハハハハハ」
🤦 (小学生でやってた方がヤベぇよ、、、)
な、令和のこの時代(被害妄想)。「もしかしたら携帯でコード書くって、ありよりのありでは?🤔」 と勘違いしてくれる人がいることを夢見た記事。
コーディングするのを楽にするためにコーディングをして、そのコーディングを便利にするためにコーディングをする極楽の無限回廊。
(Vim を使わせていただいてますが).vimrc
をいじりVim ライフを快適するサイクルに似ていますね。どこでも操作できるPythonista3 の沼度もなかなかですぞ〜
基本的にスクリプトの完了通知を、触覚フィードバックしているが、PythonやJupyterでiPhone/iPad先端機能を簡単・自由にプログラミング!「土台篇」:hirax の書籍内で使えることに気がつき、普段使いのスクリプト全てにぶっ込んだ。
day05
- タイトル:
- 概要: GUI アプリを作成するためのui モジュールの基本的な使い方
- 使用モジュール:
- おすすめ度: ★★★☆☆
振り返り(独り言)
iPhone アプリでiPhone アプリを開発できるようにするため、Pythonista3 では必須モジュール(と、考えている)のui モジュールの基礎的な実装と挙動を紹介。
とはいえ、ui.View
以外は省略する力技で、View にadd していけばええんやで。と随分といい加減な紹介となってしまった。
frame
のサイズがfix するタイミングがわかれば、やりたいようにレイアウトが組めるようになるし、作りたいものなんてそれぞれでニーズが違うからなぁ。と、基本的な概要紹介をすることの難しさを痛感。提供側の抽象度と、受け取り側の抽象度理解のせめぎ合いなんですわね。
day06
- タイトル:
- 概要: 数学の関数(sine)を使って、View 上に線を引いてなんか綺麗に見せる
- 使用モジュール:
- おすすめ度: ★★★★☆
振り返り(独り言)
見た目って大事ですよね。なんか「お!?」となってもらえればと、早々にクリエイティブコーディング要素を紹介。
私自身、プログラミングの入りがprocessing で、グラフィックスでフィードバックが来るプログラミングが好きなんですよね。
Pythonista3 ではmatplotlib が使えますが、ui モジュールのView にmatplotlib の結果を乗せるとなると、結構面倒になり遠回りな気がしているので、グラフ表現の正確さはないですが、draw
で数値を扱い描画するくらいはできたら、色々幅が広がるかと考え紹介。
逆に、無駄が多い処理でView がカクカクしていると「あーiPhone 頑張っているのね〜」って気持ちになってちょっと好きです。
day07
- タイトル:
- 概要: 過去scene モジュールを使って作成したコードの紹介。紹介コードをゲームに限定
- 使用モジュール:
- おすすめ度: ★☆☆☆☆
振り返り(独り言)
滑った雰囲気を出した可笑しさを狙ったら、ダダ滑りして目も当てられなくなったやつ。
アドカレがちょうど1週間ということで、息抜きついでに書き出したら、呼吸ができなくなっていた。
ゲーム作りって全方面いろいろケアしなくては行けなくて大変ですよね。存在しているゲームの移植ですら私は超大変だった思い出です。
day08 | day09
- タイトル:
- 概要: Pythonista3 でグラフィックスなコーディングが超おすすめですし、楽しいですよ!もう土壌は作ったので好きにやってください!的な感じ
- 使用モジュール
- おすすめ度: ★★★★★
振り返り(独り言)
呼吸が止まるレベルの精神的ダメージを追ってまでも、7日目の記事を書き終えられたのは、8日目9日目へ早く行きたかったから(ありがとう、GLSL。ありがとうprocessing)。
とはいえ、ここの振り返りで書くことはあまりなく。。。GLSL って大変だけど面白いよ(8日目)!processing っぽく書けるよね(9日目)!(迫真)。くらい。。。
手元で気軽に実行できるiPhone と、グラフィックスなプログラミングってかなり相性いい気がするのですよね。端末的にも高スペックですし。ただ、私が好きだからそう感じているだけですかね?
PC の前に座って、いざ「やるぞ〜」って始めようとすると「あれ?何をしようとしていたんだっけ?」と、気持ち切り替えとモチベーションの差異が出てしまって、なかなか進まないんですよね。これって私だけですか?
day10 | day11 | day12
- タイトル:
- 概要: Pythonista3 で、iPhone 自体やPythonista3 のファイル内をPC のように閲覧できるようにする
- 使用モジュール:
- おすすめ度: ★★★☆☆
振り返り(独り言)
無駄に3記事と伸ばしてしまったな、、、と思いつつも、どこの場所を説明しているか混乱する可能性もあるので、仕方ないところでもあるよなと、勝手に自己解決。
Python でもファイル操作はあるし、Pythonista3 の裏側としてどのように動いているのか知る機会としても意味はあるのかもと、勝手に自己解釈。
宝探し感あるので面白い。そしてOS のバージョンが上がった時の変更点を探しにいくのも面白い。
しれっと、Pythonista3 のスクリプトたちをまとめているGitHub のリポジトリを紹介できたもの個人的にはよかった。このリポジトリ単体で記事を作るのも気が引けるし、紹介しないのもなんだかなーと考えていたので。
iOS 自体やアプリ制作は、私は門外漢でPythonista3 専門(笑)なので、ぜんぜん深く掘れている自覚はない。「こんなのあるやでー」みたいな情報があったらお待ちしています!
day13 | day14
- タイトル:
- 概要: objc_util モジュールとなかよく付き合っていく個人的方法
- 使用モジュール:
- おすすめ度: ★★★☆☆
振り返り(独り言)
黒魔術なのか、メインヒロインなのか、軸ブレがすごいのですが、結果的にメインヒロインの黒魔術です。
objc_util を使うにしても、モジュールの使い方が特殊すぎて、参考になるものも少なかったり、Objective-C 側から調べて行っても遠回りなところがあるよな。と感じており、自分がどのようにobjc_util を使っているのか紹介。
事例を追加しつつ、うまくまとまると未来の自分にも優しいと思う。
day15 | day16
- タイトル:
- 概要: コードからリアルタイムに音を出す。
- 使用モジュール:
- おすすめ度: ★★☆☆☆
振り返り(独り言)
objc_util の基礎的な記事からいきなりマニアックな内容に飛んだ事を反省しつつ、紹介するタイミングはここしかないと、腹を括る。比較的にobjc_util の面倒なblock 処理があるので、まあいいでしょう。と、
過去にはcore audio を使った実装をしていて、AVAudioSourceNode が入ってから随分と楽に実装できるようになった印象。
世の中的に、グラフィックスの見た目の処理は充実しているが、音関係はクラシカルな処理のままで、コツコツとやっていく感じがしている。まぁ音声データを事前に準備すればいいのだけど、音関係のプログラミングの進化に期待。
day17 | day18
- タイトル:
- Pythonista3 で3DCG やろうぜ!SceneKit のプリミティブなもので遊ぶ - Qiita
- Pythonista3 で3DCG やろうぜ!外部のデータをSceneKit へ呼び出したりして、絵力をつける - Qiita
- 概要: SceneKit をPythonista3 で呼び出して実行をする
- 使用モジュール:
- おすすめ度: ★★☆☆☆
振り返り(独り言)
最終的にAR に着地をしたいために、SceneKit の基礎からはじめる。SceneKit が少しでもわかっていれば、ARKit は追加機能みたいな感覚で扱えるような気がしている。何事も基礎が大事ですね。
SceneKit を実装していると、だらだらと長くなってしまうなぁ。と感じる場面がある。背景としてはScene File(.scn
)を簡単に操作できるScene Editor があり、そのエディタのGUI を触ってみるとすこし合点がいく。
iOS で SceneKit を試す(Swift 3) その11 - Scene Editor を使ってみる - Apple Engine
話を飛躍させると、Scene Editor の実装とコードのみの実装で「なるほど!オブジェクト思考!」と、気づきを得ることができた気がしている。情報が整理されたGUI 上で操作するデザインと、コードを書く(行を増やしていく)行為のメリットデメリットが顕著に出ているのである。
わざわざPythonista3 で実装をすることで、普段の通常実装では気が付かない部分が見えてくるのが面白い。わざわざ面倒なことをやることで、何か気づきを得るてきな法則に名前ありそう。
day19 | day20 | day21
- タイトル:
- 概要: Pythonista3 でAR を実装する。平面検出と顔の検出
- 使用モジュール:
- おすすめ度: ★★★☆☆
振り返り(独り言)
SceneKit を経のARKit なので、少々ハードルは下がっているように感じている。しかし、ARKit はリアルタイム検出なので、端末のカメラ情報を取り込み、そのカメラ情報をView に出してあげる必要がある。カメラをView に登場させる方法は、先人のつよつよな人たちのサンプルがたくさんあるので、ARKit とカメラ取得とScenenKit の処理体系を部別して考えることが必要。
3DCG 関係でつきまとう、SIMD がPythonista3 ではなかなかの曲者で、まだ解決方法が見つかっていない。今回のアドカレでは紹介できていないMetal も同様にSIMD 活用が多数あり、SIMD をクリアするとまたPythonista3 でイノベーションが起こるかもしれない。
あと、ARKit 関係は、リアル世界の情報をキャプチャするのでキャプチャに恥ずかしさがあるですね。
day22 | day23
- タイトル:
- 概要: 機械学習の力をPythonista3 を使って感じる
- 使用モジュール:
- おすすめ度: ★★☆☆☆
振り返り(独り言)
個人的に2022年は、AI が一般普及した年だと感じている。Stable Diffusion の画像生成を筆頭に、GitHub Copilot のコード提案などなど。Core ML はそれ以前よりありましたが、使ってみるのであれば、いまですわね。
実装としては、かなり上っ面の部分を整備して、ぶん投げた結果を受け取るくらいなので、機械学習がちんぷんかんぷんでもどうにかなるのがすごい。
今回アドカレで紹介している実装だと、最新のものなのでまだまだ改善や遊び方の余地があるなと感じている。
day24 | day25
- タイトル:
- 概要: Pythonista3 でPython ではなく、WebView 上でJavaScript をやって、WebGL からGLSL を描画できるようにする
- 使用モジュール:
- おすすめ度: ★★★★★
振り返り(独り言)
WebGL 最高!!!
比較的にWebGL やGLSL は大変という風潮があるが、objc_util の実装と比べれば、同等かもしかしたら優しいという勘違いのもと楽しく実装ができる。JavaScript のデバッグはeruda があるのでobjc_util よりは楽。
Eruda: Console for Mobile Browsers
ただ写経をすれば、動くってすごい良くないですか?絶対動くという信頼のもとコードが書けることっていいですよね。その事実だけで気軽に実装ができます。objc_util は動くのかわからないまま実装を進めますからね。。。
また、GLSL もデバッグが色でしかできないとかありますが、objc_util はなんの反応もなく落ちることがデフォなので、色の情報だけで随分ありがたいという感覚を持つことができています。
iPhone というプログラミング環境 📱
iPhone でプログラミングをやるって面白いのです。PC でプログラムを書くのと違った、良さや楽しみがあります。
決してマジョリティになりたいわけではありませんが、候補や可能性のひとつとして程度にはあっていいのかな?とは感じています。
執筆環境
今回のアドカレ執筆は基本的にPythonista3(iPhone)で書いています(90% ほど)。iPhone にWorkingCopy という、Git 管理ができるアプリを入れているので、GitHub 上へプッシュしてPC との連携も簡単です。
当初は、日本語のテキストをMarkdown 形式で書くということで、iPhone もPC もObsidian を考えていました。vault を無理矢理GitHub 連携をしていけば端末感を気にせずに書けるのかなと。しかし、画像キャプチャとそのキャプチャした画像を貼り付けるなど、結局のところPythonista3 を開く必要がでてきてしまい、そうであればPythonista3 で全部完結すればよくね?ということで、Pythonista3 で着地しました。
PC 側では、VSCode やVim で微調整をしたりPrettier で整形をしたりしています。Qiita へのアップはどうしてもPC でのブラウザに軍配があがるので(無理に全部iPhone でやりたい訳ではない)、最後のお化粧的にPC を使う感じでした。
決してiPhone の方が入力が早いとかではなく、PC ってなんでもできてしまうので、アドカレ原稿を書く以外の楽しい誘惑に負けてしまうのです。
キャプチャ関係
コードやら、実装のやり方は別にまとめたいと思っていますが、取り込みもPythonista3 で完結させています。
photos — Photo Library Access on iOS — Python 3.6.1 documentation を使って写真を取り込み(リサイズして)データを記事のディレクトリに生成するのと同時に、生成したファイルパスをclipboard に格納して記事にリンク先を貼れるようにしています。
動画は、iPhone 純正のショートカットを使ってGif に書き出してから、写真と同様の処理をしています。
Qiita 上に写真を載せるにはサーバーにあげなければならず、PC 上で上げ直すかたちです。しかし、1ヶ月200MB までの制限があるらしく、後半は(上限を越えたので)GitHub の記事を管理しているリポジトリに、issue として画像をアップしその画像URL を貼っています。
[Q&A] Qiitaに画像がUpできません - Qiita
private なリポジトリでも、issue の画像はパブリックのようで、Qiita の記事上には反映されています。
画像取り扱いのワークフローは改善の余地がありそうです。
最後に
このアドカレで、Qiita へのアウトプットを始めることができました。
書き始めは、#
なのか##
なのかヘッダーすら悩みながらのスタートでしたが、どうにかこうにか終えることができました。Pythonista3 のコミュニティのみなさんのフィードバックや、Qiita 上SNS 上の反応をいただきゴールできました。
妻、息子たちも含め本当にありがとうございます🙇
ちなみに、Pythonista3 インストールの日は、2017/12/21 で4年もやっていたんだなぁと感慨深いです。まだまだ、Metal やファミコンのエミュレータなど書けることはたくさんありそうなので、アウトプットを続けていきたいと思います。
ここまで、読んでいただきありがとうございました。
せんでん
Discord
Pythonista3 の日本語コミュニティーがあります。みなさん優しくて、わからないところも親身に教えてくれるのでこの機会に覗いてみてください。
書籍
iPhone/iPad でプログラミングする最強の本。
その他
- サンプルコード
Pythonista3 Advent Calendar 2022 でのコードをまとめているリポジトリがあります。
コードのエラーや変なところや改善点など。ご指摘やPR お待ちしておりますー
なんしかガチャガチャしていますが、お気兼ねなくお声がけくださいませー
やれるか、やれないか。ではなく、やるんだけども、紹介説明することは尽きないと思うけど、締め切り守れるか?って話よ!(クズ)
— pome-ta (@pome_ta93) November 4, 2022
Pythonista3 Advent Calendar 2022 https://t.co/JKUxA525Pt #Qiita
- GitHub
基本的にGitHub にコードをあげているので、何にハマって何を実装しているのか観測できると思います。