Pythonista3 やろうぜ！標準機能をみてみる 〜 コーディング編

この記事は、[Pythonista3 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/pythonista3) の01日目の記事です。

https://qiita.com/advent-calendar/2022/pythonista3

一方的な偏った目線で、Pythonista3 を紹介していきます。

ほぼ毎日iPhone（Pythonista3）で、コーディングをしている者です。よろしくお願いします。

以下、私の2022年12月時点の環境です。

```
--- SYSTEM INFORMATION ---
**System Information**

* Pythonista 3.3 (330025), Default interpreter 3.6.1
* iOS 16.0.2, model iPhone12,1, resolution (portrait) 828.0 x 1792.0 @ 2.0
```

他の環境(iPad や端末の種類、iOS のバージョン違い)では、意図としない挙動(エラーになる)なる場合もあります。ご了承ください。

ちなみに、`model iPhone12,1` は、iPhone11 です。

## 概要

「Pythonista3 とは？」みたいなことは、`Pythonista3` と検索をすれば、先人たちの素敵で丁寧な記事がありますので、ここでは、割愛させていただきます。
ゆるふわに言えば、iOS, iPadOS でPython が実行できるアプリです。

- App Store
  - [「Pythonista 3」を App Store で](https://apps.apple.com/jp/app/pythonista-3/id1085978097)
  - (2022 年 12 月現在)1,600 円

https://apps.apple.com/jp/app/pythonista-3/id1085978097

- 公式サイト
  - [Pythonista for iOS](https://omz-software.com/pythonista/)

https://omz-software.com/pythonista/

- 私が Pythonista3 の存在を知った記事
  - [iOS 上で動作する革命的ものづくり環境「Pythonista 3」の魅力をとくと語る | ひとりブログ](http://hitoriblog.com/?p=42145)

http://hitoriblog.com/?p=42145



### iPhone アプリでは最強のコードエディターなのでは？

公式サイトにて

> A Full Python IDE for iOS

とあるように、IDE として十分な機能を持っています。そして、完全なる主観ですが、コードエディターとしての質が高いように感じます。

- 入力補完
  - `'` や`(` の自動閉じ
- 入力中のキャレットの移動操作
- シンタックスハイライト
- コード全体を俯瞰した時の見やすさ
- 実行の容易さ

作者の美的感覚や丁寧さが、ユーザビリティも優れ素敵なアプリになっているように感じます。
毎日Pythonista3 で何かをしている人間がここに（確実に）一人は存在しているので、魅力溢れるアプリケーションの一つであることは間違いないでしょう（断言）。

## 触ってみよう

さて、[Pythonista 3](https://apps.apple.com/jp/app/pythonista-3/id1085978097) のダウンロードは無事に終えてますよね？

https://apps.apple.com/jp/app/pythonista-3/id1085978097

更新日が古く継続が心配ですか？大丈夫です。その時は、その時です☺️

割愛パワーが続きますが、ファイルの新規作成、実行方法などに関しては、ここのQiita にも素敵な記事がたくさんあるので詳細はお譲りしようと思います（`3` の表記揺れ問題）。

- [Pythonista - Qiita](https://qiita.com/tags/pythonista)

https://qiita.com/tags/pythonista

- [Pythonista3 - Qiita](https://qiita.com/tags/pythonista3)

https://qiita.com/tags/pythonista3

この記事では、そんな素敵なPythonista3 の記事がたくさんある中でも、あまり言及されていない機能や、個人的に「これは！」と思っている機能を紹介していきます。

### Object Inspector

実行後、変数に何が入っているか？どのような状態になっているか？が確認できます。
憶測で考えるよりも、結果を見た方が確実に早いので、エラーの早期発見が期待できるでしょう。

#### 使い方

Pythonista でスクリプトを実行後、コンソール画面に移り`(i)` アイコンを押すことで、確認することができます。

![img221110_161846.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/a9347c76-036b-9b7a-46d1-8f5e6bde3b45.gif)

今回は適当な配列を`sin_list` として格納しています。

```python
from math import *

sin_list = [sin(pi * n) for n in range(10)]
```

![img221113_173229.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/cc090f84-355c-54a4-9fb9-453b883460f7.png)

![img221113_173944.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/3f2d5f9e-3b75-681d-3957-e4908922a024.png)

![img221113_174000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/7e8c64d2-4540-aab9-95e4-55dfcd20dc41.png)

インポートしたものや、配列の変数が確認できます。

また、配列等の中身も見ることができます。配列は、index も確認できるので、全体総数や取り出したい数値もわかりやすいです。

![img221113_174643.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/40b4a845-7577-7777-b36d-c1305bfb877b.png)

![img221113_174651.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/8c10ddc8-eec7-931a-5e84-81bf0be91a34.png)

#### 副産物として

inspector のそのものの機能ではないのですが、個人的な発見で、いま現在も意識付けていることがあります。

##### モジュールのインポート

`from hoge import *` と書く`*` を使った呼び出し方についてです。

`*` で、インポートをするとinspector の最上位階層（ルート階層？）表記が、インポートしたもので埋まってしまいます。

##### `*` でのインポート

```py
from math import *

sin_list = [sin(pi * n) for n in range(10)]
```

![img221113_175308.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/162c05bc-a20a-37ca-de19-b89eb49a55d2.png)

##### 識別子名を使ったインポート

```py
from math import sin, pi

sin_list = [sin(pi * n) for n in range(10)]
```

![img221113_175703.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/0e537a9b-6909-2b5c-1da8-d5d0d24904dc.png)

##### `PEP 8` の観点から見ても

「状態を確認したい」といったニーズは、インポートしたモジュールよりも、自身で定義した「変数の値」の方が高いと考えられます。

今回の例ですと、`math` モジュールを呼び出しました。

実行結果をinspector で確認するときに、`math` モジュールの`acos` や、`acosh` 等の関数名の情報は不要であり、ある意味で邪魔な存在になりえます。

[PEP 8 – Style Guide for Python Code | peps.python.org](https://peps.python.org/pep-0008/#imports) の、当たり前な内容かもしれませんが、私はinspector を通し「なるほどねぇ、確かにねぇ」と考えることができました。


https://peps.python.org/pep-0008/#imports


気軽に`*` をしてしまうことの罪深さ。。。（特に）サンプルコードで散見される書き方ですが、「えいっ」っと、`*` を意識的に書き換えてみてもいいかもしれません。

（マゾ的な考え方かもしれませんが）書き換えた結果、エラーが出てしまったら、エラー情報やinspector を確認すればいいことです。モジュールの理解が深まることでしょう☺️

### Reformat Code

ここに`Hello World！` なコードがあるじゃろ？

```hw.py

hello_world= 'Hello World'



print(hello_world)
```

こうして、

![img221110_160212.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/aef59bf2-b428-a435-075a-536c2d1b3391.gif)

こうじゃ！

```hw.py
hello_world = 'Hello World'

print(hello_world)

```

iPhone なので、ちまちまとした編集は骨が折れます。ざーっとコードを書いて、整形しコードを整えて、またざーっと書くいて、リズムよくコーディングができるのではないでしょうか。

また、コード実行前のインデントエラーや、表記ミスを見つける手立てとしても有効です。

#### ※ おことわり

「私は」iPhone 上でコーディングするときに限って、2 スペースで設定してしまっています。
iPhone の縦長ディスプレイ設計で、4 スペースは行内折り返しの可能性が高く、（iPhone 上では）可読性が落ちてしまうと考えているからです。

[PEP 8 – Style Guide for Python Code | peps.python.org](https://peps.python.org/pep-0008/#code-lay-out)

https://peps.python.org/pep-0008/#code-lay-out

`if` や`def` 宣言後の行頭が揃う設計思想や、綺麗さの考慮もありますが、横に広いPC ディスプレイと、縦に長いiPhone の性質の違いを鑑みた私なりの結果です。

蛇足になりますが、80文字ルールの部分も似たような考え方です。

整形のルールを一部変更することもできます。また、コードスタイルも設定から選ぶことができるので、自分に合った設定にしてみるのもいいでしょう。

なんやかんや言ってますが、私は基本デフォルトの設定です。

`setting` → `Indentation Coding Style`

![img221113_232221.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/2360ee41-1e58-03df-677b-5a8e54f291fe.gif)

### Extended Keyboard

PC（キーボード）を使用したテキスト編集と、携帯（iPhone）を使用したテキストの編集。それぞれ一長一短あると思います。

iPhone でコーディングをする時、（個人的に）結構ストレスとなる部分をPythonista3 は、素敵な設計でカバーされているように感じます。

#### undo / redo

![img221113_230629.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/44464e42-c31c-bd40-1c21-c474b7025721.gif)

`[:]` を、長押しすると、`[redo]` `[undo]` と出てきます。これで、シュッとやり直しをすることができます。

![img221113_230655.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/b1849437-a7ae-2072-bad3-969890ffc09a.png)

![img221113_230712.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/af92eecd-cd9a-f29c-d43c-eabed38f60a0.png)

入力ミスや、「やべぇ消してしまった」といった場面でドシドシ使っていきましょう。

#### キャレット移動

![img221113_232621.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/9c964f6e-fd94-4a15-6949-feb883e64ba2.png)

Extended Keyboard 上をスワイプすると、キャレットが移動します。

![img221113_232601.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953777/96f00dcb-0bfc-6929-e147-bf257397ee1e.gif)

個人的に、「最高だ！」と感じる点は、行頭や行末にキャレットがある場合に、他上下行に移動をしない点です。

（PC のテキストエディタでも挙動の差があり、何が至高かは言及しませんが）iPhone の場合だと、行の上下移動は容易ですが、行内の左右の移動の面倒さがタッチパネルの現状の宿命だと感じています。

そういった点でも、アクティブである行以外への移動をさせない。という設計はとても合理的な考えだと感じています。

## 次回は

Pythonista3 で、コードを書く際の、マインドを謎にお伝えしてしまいました。。。1mm も実用的な内容がない記事が生成されてしまいました。。。

次回も、まだ少しPythonista3 の概要的な部分の紹介になると思います。コードをゴリゴリ書きたい！という方々もう少々お待ちください。。。

ここまで、読んでいただきありがとうございました。

## せんでん

### Discord

Pythonista3 の日本語コミュニティーがあります。みなさん優しくて、わからないところも親身に教えてくれるのでこの機会に覗いてみてください。

https://t.co/0IOW2hn1VC

### 書籍

iPhone/iPad でプログラミングする最強の本。

- [Python や Jupyter で iPhone/iPad 先端機能を簡単･自由にプログラミング！「活用篇」：hirax](https://techbookfest.org/product/1WiyV4LEev3f4YrzesRKWV?productVariantID=axX32srsSgtLtZWUtjkj99)

https://techbookfest.org/product/1WiyV4LEev3f4YrzesRKWV?productVariantID=axX32srsSgtLtZWUtjkj99

- [Python や Jupyter で iPhone/iPad 先端機能を簡単･自由にプログラミング！「土台篇」：hirax](https://techbookfest.org/product/wTZTyeibm5GQ5XgdfMrEBV?productVariantID=kRDmN1udbEYZUWbETdwL8r)

https://techbookfest.org/product/wTZTyeibm5GQ5XgdfMrEBV?productVariantID=kRDmN1udbEYZUWbETdwL8r

### その他

- サンプルコード

[Pythonista3 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/pythonista3) でのコードをまとめているリポジトリがあります。

コードのエラーや変なところや改善点など。ご指摘やPR お待ちしておりますー

https://github.com/pome-ta/Pythonista3AdventCalendar2022sampleCode

- Twitter

なんしかガチャガチャしていますが、お気兼ねなくお声がけくださいませー

https://twitter.com/pome_ta93

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">やれるか、やれないか。ではなく、やるんだけども、紹介説明することは尽きないと思うけど、締め切り守れるか？って話よ！（クズ）<br><br>Pythonista3 Advent Calendar 2022 <a href="https://t.co/JKUxA525Pt">https://t.co/JKUxA525Pt</a> <a href="https://twitter.com/hashtag/Qiita?src=hash&amp;ref_src=twsrc%5Etfw">#Qiita</a></p>&mdash; pome-ta (@pome_ta93) <a href="https://twitter.com/pome_ta93/status/1588570697777152006?ref_src=twsrc%5Etfw">November 4, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

- GitHub

基本的にGitHub にコードをあげているので、何にハマって何を実装しているのか観測できると思います。

https://github.com/pome-ta