プログラミングを始めて5ヶ月で出来るようになること

たきもとけんご.com

こんにちは。たきもとです。
3ヶ月目の報告はすっ飛ばしてしまったので,この調子で進捗報告を続けていけたらいいなぁ。

さて、今回で5ヶ月目の報告です。
プログラミングを始めた当初は どの言語からやればいいの? という感じでした。
今では、 どうやってこの動作を実現すれば良いの? という具合に思考が変化しています。

今回の報告では
-先月と比べて何ができるようになったのか
-今までを振り返って身に付いた主な技術
-心境の変化
などを書きます。

先月との差分

スクレイピングツールは一先ず完成

プログラミング開始から先月までは
-スクレイピング
をしていました。

もともと個人事業主として事業をする上で 効率化 が課題になっていました。
事業とはいえ、会社員と変わらずに主な情報源は相変わらずネットです。
如何に効率よく情報収集ができるかが事業存続の鍵となっていました。

先月までは
-スクレイピングって何?
-どうやってやるの?
という具合に調査→実装→調査→実装・・・ の連続でした。

今月からは、ツールによって集めた情報は事業方針の検討材料になっています。

半手動、半自動 という完成度

本当は全てを自動化したかったのですが、できませんでした。
原因の切り分けもできていなくて、
-私の力不足 なのか
-物理的に困難な技術 なのか
の判別ができていません。

きっと前者だと思うのですが・・
良いライブラリやAPIがあれば使おうと思っています。


なので、一先ず確実に動作する箇所まで作り上げて、一部は手動でデータを編集し、再度ファイルに噛ませる。
こんな状態になっています。

ツール と呼ぶにはまだまだ未熟なものですが、現時点では手作業を大幅に減らしてくれたので良しとしています。

現時点でのスクレイピングツールの課題

現状の課題は次の通り。

-動作が重い
-UIがない。(ローカルでのみ動いている。フォームの利用なし。)
-検索条件の一致処理が甘い


-動作が重い
これは非同期処理を行えば改善できそうです。
現段階ではcURL_multiを利用して改善を試みています。
ただ、一つのサイトへの同時アクセスによってサーバ負担を掛けてしまう事を懸念しています。
技術的にこれは改善可能ですが、相手方への負担を考慮した設計を再考する必要がありそうです。

-UIがない
phpファイルにベタ書きなので、汎用性が著しく低いツールになっています。
数カ月前にスクレイピングの勉強のためにamazon Productive API を利用してフォームを作ってみました。
その時点ではグローバル変数の値渡しも上手く行ったので、今後はインターフェースを設けてみる予定です。

-検索条件の一致処理が甘い
たくさんの候補からキーワードのみで一致処理を行おうと試みていました。
その結果、これは不可能だなと。
検索対象の文字列が事前にわかっていれば可能かもしれませんが、対象がどんな文字列なのか分からない以上、たくさんの候補から唯一つを選べるわけはないなと。

そこで、画像も引っ張ってこようと考えています。
-検索ワード一致
-画像一致
のように、パラメータを新たに増やせば絞り込み精度が上がる気がしています。
ただ、先述したように今はここで苦戦しています。
どこかに画像比較のライブラリやらAPIやら転がっているのかな・・
自分で画像処理しようとすると骨が折れそうだし・・・。

こんな感じです。
ここからはできるようになったことを書いていきます。

function/class の外部ファイル化

一つのファイルに処理をガシガシ書くと長くなって見辛いです。
処理毎に、又はクラス毎にファイルを分ければメインファイルはスッキリします。

そんなわけで、
require
include

などでファイルを呼び出してメインファイルのスマート化を実現しています。

ここでさらっと class と書きましたが、手持ちの初心者本にはクラスの使い方が載っていませんでした。
そこで、ドットインストールの力を借りてちょいちょい練習をしました。

オブジェクト指向がはっきり分かった訳ではないのですが、privateにすべきメソッド、プロパティくらいはなんとなく分かってきました。
今は私しか使わないツールだからいいけど、他者が使う場合に
-変更されたくない値
-勝手に呼びたされたくない関数
がある場合は裏でprivateにしちゃいます。

こんな感じの理解です。

path指定方法

先述した内容とやや重複するのですが。
外部ファイルを読み込むには場所を指定しないといけませんよね。
現段階では自分しかファイルを触らないので相対パス、絶対パスの区別はつけていません。

ただ、知っているのと知らないのではコードの管理のしやすさが変わると思っています。

具体的には、
dirname(FILE)
みたいな関数を知っているとパスをベタ書きせずに済みます。

csv read/write

csvの処理については初心者本(『イラストでよく分かるPHP』)に載っていたので何度か読み返してようやく使えるようになりました。

csv出力の時に文字コードが SJIS という事まで書いていてくれれば助かったのですが、これはググッて調べました。
情報をwebに上げてくださった皆様、感謝しています。

ライブラリ/外部APIの利用

スクレイピングのために
-DomDocument
-xpath

日本語→英語 への翻訳のために
Microsoft translate API

をそれぞれ利用しました。


ここでの後悔は、先に初心者本 + ドットインストール という流れで基礎を網羅しておけばよかった点です。
私は初心者本が終わり次第直ぐにツール開発に移りました。
この時点ではクラスの使い方もわからずにライブラリを扱っていました。

先にクラスを知ってから、というかクラスを知らないと
-よく分からないけどこう書けば動く
みたいな場面に慣れて、理解が浅くなります。

何が基礎なのかは本やサイトによって異なりますが、
-function
-class
-require, include
は最初に押さえておくべき点だと思いました。

非同期通信

これはまだ
-一応使えそう
というレベルです。

今のツールはどうしても直列処理から抜け出せずにいます。
-popen
-curl_multi
の力で解決しようとしていますが、そもそもの設計段階で無駄なことをしていないか?
無駄な関数の呼び出し方をしていないか?

ここら辺を考えているのがイマ、という感じです。

まとめ と 今後の抱負

私は最初から
-こういう動作をするものを作る!
と決めてスタートしました。

現状では完全自動化にはなっていませんが、少なくとも
-PHPの基本的な関数は難なく使える
-ライブラリ、APIも徐々に使い始めている
-PHP 公式マニュアルが読める
-非同期通信に手を出し始めた
というレベルにはいます。

今月中には
-DB(MySQL)
-FuelPHP
に手を出すので、さらに出来ることが増えそうです。

今後の抱負

一先ずツール作成は一旦見切りをつけようかなと。
先述したDBやらフレームワークやらを学びつつ、必要に応じて改良を重ねていくことにします。

ツール以外では、2016年中に
-サイト作成 (デザイン込み)
-javascript
-ネットショップ作成
あたりができれば良いかなぁと思っています。

ゆるい感じでHP作成の受注とかもやってみたいですし。

ふんわりした抱負ですが、こんな感じで今後もプログラミングを続けていきます。
次回は3月末 または 4月上旬に進捗報告をします。

この本は私が購入した初心者本の内の一つです。本書のcsvの利用, require, includeに関する情報は役に立ちました。
外部ファイル化の概念を学びたい方にオススメの一冊です。

スポンサーリンク
336 x 280 – レクタングル(大)
336 x 280 – レクタングル(大)
  • このエントリーをはてなブックマークに追加

この記事が気に入ったら
いいね!しよう

トップへ戻る