コードを書いてて感じたこと。
感じたこと
実装したい本質的なコードを書くより、他のことに時間を奪われていることが多いと感じた。
- コード全体の見通しを事前につけられない
- 実装時に迷ったり調べることが多い
- エディタによる自動化サポートがない
- 秀丸がない(grep検索、grep置換、テキスト操作などに手間取る)
- システム不安定により作業成果消失
- ReadMe, ブログの書き出し
また、ディレクトリやファイル構成が大きく変化するせいでGitHubで管理できない(別リポジトリにしてしまったほうが楽)。同一リポジトリで管理し続ける方法も調査する必要がある。その前に、コード全体の見通しを立てられるようになる必要があると感じた。
A. コード全体の見通しを事前につけられない
- どんなディレクトリ構成、ファイル構成にするか
- どんなpakage, module, class, method, 変数が必要か
- 継承関係
- アクセス修飾子(private, public)
頻繁に構成ファイル、module名、メソッド、引数などが変わるため、その修正に追われて本質的な実装の妨げになった。
原因
- 言語仕様を把握していない
- 全体像のインタフェースをイメージできない
- 修正する手続きがわからない
- 規模が大きくなるに連れて適切なインタフェースが変化する
A,Bは私の技術的な問題だが、Cは改善のしようがない。
現状
- 全体像のインタフェースをイメージできない
対策案
- 言語仕様を把握していない
- 全体像のインタフェースをイメージできない
- テンプレートを作る
- 「こういうときは、こう実装する」というコードをまとめて書いておき参照して書く
- テンプレートを作る
- 全体像のインタフェースをイメージできない
- 修正する手続きがわからない
B. 実装時に迷ったり調べることが多い
各文脈における定義や知識がなかったり、忘れたりして調査することが多い。
Python
if __name__ == "__main__":
による実行- ファイル操作
- class
- 継承
- オーバーライド
- Interfaceはない
- オーバーロードはできない
- オーバーライド
- アクセス修飾子
- protectedはない
- property
- 実装方法を調べる
- 継承
- 文字列操作
- format
- “{0}”.format(var)
- “{name}”.format(name=var)
- 置換
- ‘ab34’.replace(‘34’, ‘cd’) # ‘abcd’
- トリム(前後の空白文字削除)
- ‘ ab cd ’.strip() # ‘ab cd’
- 前方一致、後方一致
'abcd'.startswith('cd')
'abcd'.endswith('cd')
- 正規表現
- https://docs.python.jp/3/library/re.html
import re
result = re.match(pattern, string)
,re.sub(pattern, repl, string, count=0, flags=0)
- format
- dictに含まれているか確認
if value in dict:
- 三項演算子
(変数) = (条件がTrueのときの値) if (条件) else (条件がFalseのときの値)
- ライブラリ
- requests
- requests.post(url, headers=headers, data=data, auth=(username, password))
- dataset
- table.update(dict, [‘Id’])
- requests
HTTP
- 通信Method(GET,POST,DELETE,PATCH,…)
- Header
REST
RESTなWebAPIを自動化、共通化したかったができない。仕様が明確に定義されているわけではないから。
GitHubAPI, GoogleAPIなど提供者側によって使い方や実装方法が異なる。認証も独自ヘッダを使うとか、APIごとに異なる認証方法が必要などの仕様により共通化が難しい。
OAuth
GitHubAPI, GoogleAPIなど提供者側によって使い方や実装方法が異なる。
データ構造や型
WebAPIの戻り値はJSONやXML。それをPythonの型に変換し、DB保存するときはRDBMSで扱えるような形式に変換する必要がある。
C. エディタによる自動化サポートがない
現状のPythonコーディングには以下の問題がある。
- エディタの補助機能が貧弱すぎる
- コンパイルエラーが貧弱すぎる
自動化できるであろうことを手動でやらねばならないせいで時間を浪費している。
- プログラム実行
- ターミナルから実行しているがエディタのF5キーで即実行したい
- コメントアウトのON/OFF
- 手動でしているがショートカットキーでしたい
- 実行時エラー
self
- メンバ関数の第一引数に書き忘れる
(
と)
,{
と}
,'
閉じ,"
閉じ- 未定義変数の警告
- コンパイルエラー
:
- if文, for文, 関数などの構文の末尾に書き忘れる
- 自動リネームできない
D. 秀丸がない
Windowsの秀丸では簡単にできていたことが、Linuxでは難しい。
ファイル操作
コマンド構文だけでなく正規表現やエスケープなども考慮せねばならない。予備知識が豊富でなければ使いこなせない。とてもコードを修正することに集中などできない。毎回こんなことをやっていられない。秀丸のようなGUIが欲しい。
ファイラ
caja
がデフォルトだが、nemo
をインストールするとそれが標準になってしまった。削除しようにも、削除できなくなってしまった。
- 再帰的にファイル検索できない
find . -name "*.html"
のようにコマンドで実行するが、作成日時順にソートできない
- 前回終了した状態を復元しない
- 前回の状態がリマインダの役割も兼ねていた。思い出しが必要になる
- 次回、また同じ状態を手で復元せねばならない
テキストエディタ
pluma
は秀丸と違い、ファイルの拡張子ごとに設定を保存できない。.py
ファイルだけはタブをスペース4つにしてほしい。しかしできない。設定の変更や戻すのを忘れてハードタブが入力され、エラーになることがある。そのたびにファイルを探し、置換する作業が必要になる。
前回終了した状態を復元しない
- 前回の状態がリマインダの役割も兼ねていた。思い出しが必要になる
- 次回、また同じ状態を手で復元せねばならない
単語の選択範囲が不便
- 秀丸なら都合のよい単語を選択できた
対策
- Wineは使えなかった。秀丸がまともに動作しない。秀丸ファイラは起動すらしない
- Linuxならvi, vimを使えばいいかもしれない。しかし、それを体得するのが難しすぎる。
E. システム不安定により作業成果消失
- LinuxMint 17.3 MATE 32bit
Linuxは環境を変更すると元に戻せなかったり、壊れたりすることが多い。その契機がインストールやアップデートである。いちいちインストールするたびに環境破壊されて作業が進まない。
フリーズする
作業データが飛んで最初からやり直すことが頻発している。原因は以下のうちのどれかだと思う。
F. ReadMe, ブログの書き出し
- テキストを書くだけで時間がかかる
- テンプレのコピペを自動化したい
- リポジトリとその対応記事をさがすのが面倒
- はてなブログの応答が遅い
- ReadMeでライセンス情報を書くのが面倒
- ライセンス調査する必要がある
所感
すべて私の未熟のせい。問題はこれらを改善していくだけで、本題のコードを書いている場合ではなくなってしまうこと。
サクっと本題に入りたい。ただそれだけ。そのための環境を自分で作っていかねばならない。その実力があればいいのだが、ないから困る。やるしかない。
どうやってコードを書く以外の作業を自動化するかが重要になる。GitHubアップロード作業もそのうちのひとつ。今度はそのためのプログラミングを行うための作業を自動化したくなる。Windowsならできていたのに…。