【Python】1.はじめに~for文減少への追求~

Pythonでの処理を速くしたい!

いきなりスミマセン。「Pythonでの処理を速くしたい」これが、for文を減らしたいと思ったきっかけです。

自分の作業を少しでも減らすため、Pythonを使って作業の自動化を考えていました。実際に、作ってみている最中、処理に時間が掛かる箇所が出てきて、開発のストレスに。
それがfor文のところでした。

完成後、処理に時間が掛かるのであれば、まだ気にならないのですが、開発中はストレスになります。処理に掛かる時間も10秒くらいでなんとも微妙な長さです。

Pythonでfor文に時間が掛かるということはなんとなく知っていました。既存のライブラリ(numpyなど)はそういった部分がうまく作られていて、処理も軽いとか。また、ブロードキャストという仕組みもうまく使えそうです。ということで、numpyなどのライブラリを上手く活用し少しでもfor文を減らし、ストレスを減らしたいと思い、調査・まとめを行うことにしました。

Pythonを使い始めたきっかけ

私はウェブ系のお仕事をしています。その中でホームページ・サイトも制作しています。デザインナーさんからデザインデータをいただいて、それをウェブ上で見えるようにしています(コーディング・プログラミング)。

コードはテキストエディタ(現在はATOM)で書いていて、日々のコーディングではATOMの補完機能PhraseExpressCliborなどのソフトを使って出来るだけ手間を減らすようにしています。

さて、↓こちらの記事を見たことがありますか?
「floydhub」ブログの記事

英語で書かれていますが、ページ内の画像を見るだけでも どういったものか想像がつきます。
そうです。画像から自動でコーディングしてくれるのです。

手間を減らす方法を考えていたときに、画像→html、cssはできないのかな?と思い、調べたところこのサイトを見つけました。まだ、画像によって出来る出来ないはあるようですが、かなり衝撃的でした。近い将来ある程度の画像は処理できるようになるのではないでしょうか。

画像を準備して、クリック(コマンド)。後は放置

手間を減らす方法の1つのゴールだと思います。

ここで、どうやって動いてるの?と気になり調べてみたところ、「Python」「AI」「機械学習」「深層学習」「ディープラーニング」というワードが出てきました。元々Pythonには興味があり、AIなども気になっていました。その他も聞いたことはあるけど・・・といった感じでした。

その程度なので、どのように動作しているかほとんど理解できませんでした。そこで、「ゼロから作るDeepLearning」を読むことに。そこで、Pythonに触れました。

これがPythonを使い始めたきっかけです。

機械学習・深層学習(ディープラーニング)を見てみて

ゼロから作るDeepLearning」を読むのにはとても苦労しました。数学関連の内容も多く出てきました。

微分、e(ネイピア数)、logなど久しく離れていたものも復習しました。読み進めては戻り、読み進めては戻りを繰り返し、何とか読み切り、ある程度理解できました(したつもりです)。

このディープラーニングによって、コーディングの自動化はある程度可能だと思いましたが、それにはビッグデータが必要です。それにコードも多少ばらつくのでは?と思ったりしました。素人考えですが…

もし、ばらついたとすると、メンテナンスが難しくなります。ベストは自分がよく書く形がメンテナンスしやすいのは誰もがそうでしょう。

そこで、画像データを読み込んで、解析し、コード化する仕組みを作ろうと考えだしました。

画像からコード化への後押し「Tailwind CSS」

実はこれまでも「決まったコード」を入れたらその一式のhtml、cssが書き出されるという仕組みをphpで作っていたことがあります。ですが、ATOMの補完機能やPhraseExpressやCliborの劣化版でした。使い勝手が微妙なので、次第に使わなくなっていきました。

htmlとcssを生成しようとすると、class名が必要だったり、html、cssの2つが書き出されたり、ゴチャゴチャします。まとまりが悪く、私には上手く作れませんでした。

そんなとき「Tailwind CSS」と出会いました。

「Tailwind CSS」との出会い

コーディングに関して模索している中「Bootstrap」をまず試しました。なかなか良い感じだったのですが、もう少しシンプルな方が嬉しいと感じていました。そこで、他にもないかなと探しました。

そこで見つけたのが、「Tailwind CSS」でした。padding・marginのバラエティもあり、使いやすそうに思いました。それから実際に使用しています。

これまで数サイトで構築してきましたが、基本的には快適です。自分で書くcssは1/10程になりました。だいたい2000~3000行だったのが、200~300行になりました。元々ブロックごとに同じレイアウトでも分けたりしていたので、量が多いタイプだとは思います。

クラスを小分けにする理由は、ページごと、部位ごとに修正指示が入るためです。結局クラスを分けることになったり、子クラスを追加したりと、後付けで分かりにくくなってしまいます。であれば、最初から分けて開発コスト、メンテコストを抑えようとなりました。

話が反れてしまいましたので、戻します。この「Tailwind CSS」を使用すれば、「padding-top」だけが必要なクラスの定義は不要になり、htmlの編集だけで完結し制作もスムースです。

考える要素が減り、後押しに

細かいクラス指定が不要となり、画像からコード化への敷居が少し下がりました。これをきっかけに、コーディングの作業効率化の仕組みづくりに挑みたいと思います。

そのためにも、現在for文で処理が遅い箇所の特定と改善策を見つけたいと思います。

↓次へ

関連記事