仮想サーファーの波乗り

仮想化エンジニアの日常

プログラミング・SNS分析・仮想通貨・自動化などに関してよく書きます。

【Python初心者〜中級者向け】半年間でPython未経験が趣味で作ったものと学んだこと

半年前くらいからPythonを触ってきて、学んだこと・Pythonで作ったものをまとめておきます。

「なんとなく書きやすそう!」というアホみたいな理由で趣味で書き始めて、最初はググってコピペしながらなんとか書いていたPythonですが、半年経った今ではほとんど調べることなく頭の中にあるロジックをそのままPythonのコードに落とし込めるようになりました。趣味の時間だけでしか触ってなくてもここまで書けるようになるために何をしてきたのか。また、どんな情報を参考にして学習を進めていったのかを書いていきます。


前提

前提として、僕のプログラミング経験は以下のようなものです。

・業務でRuby on Rails:半年間(←初めてのプログラミング)
・業務でJava:1年半
・趣味でPython:直近半年間

どこにでもいるような社会人からエンジニア始めました人材です。


半年間でPythonで作ってきたものまとめ

まずは半年間趣味の時間を使ってPythonで作ったものの簡単な情報と、そこで利用した技術を紹介します。


Twitterの自動つぶやき・フォロー・リツイート仮想通貨Bot

f:id:virtual-surfer:20180708091347p:plain

初めてPythonで作ったのがコイツでした。自動でCoinGecko APIから仮想通貨の価格データ取得してきて価格速報ツイートしたり、RSSで有名どころの仮想通貨メディアの記事をリツイートしたりします。Herokuの無料枠で運用してるのでコストは0。

最初にがっつり1週間くらいかけて開発し、その後はほぼ自動で運用してますが、フォロワーが1060程度まで伸びていてびっくり( ´ ▽ ` )


↓ 開発して自動でつぶやき続けてるBotはこちら twitter.com

初めて学んだ技術

・プログラム:Python(3系)
・API:Twitter API・Coingecko APIへのアクセス方法とデータの扱い方
・DB:MySQLのテーブル/カラム構成設計
・ORM:SQLAlchemyでのデータやりとり
・PaaS:Herokuへのアプリケーションデプロイ・運用


はてなブログ記事の自動生成・投稿プログラム

f:id:virtual-surfer:20180708091044p:plain

これは1ヶ月前くらいから運用しているものですね。「はてなブログの投稿って自動化できないの?」という疑問から開発に至りました。実際に挑戦してみて、テンプレの文章構成が決まっていて、データを元に簡単なコメントを生成すれば記事になるような記事であればチャチャっと自動化できる!ことがわかりました(・Д・)ノ

やっていることはシンプルで、テンプレのテキストファイルを用意しておいて、API経由で取得したデータがどうであるかを元にコメント生成するようなプログラムで記事のタイトル・本文生成し、はてなAPIでPOSTするだけ。詳しい実装はこちらどうぞ。

記事の中でも「読者層がニッチすぎて人手で書くのが割に合わないけど、少数の人には確実に読まれる」という領域は、ブロガーは書きたがらない(割に合わないから書けない)領域で、そこの領域の記事を自動で投稿し続ければPVは上がっていくのか?今後検証してみたいと思っています。日本人が誰も知らない仮想通貨銘柄の情報とか英語情報しかないから、それの情報を自動で投稿するとかね。

初めて学んだ技術

・API:はてなブログ APIへのアクセス方法とデータの扱い方


インフルエンサーランキング生成プログラム

f:id:virtual-surfer:20180708091339p:plain

これは、2週間前くらいに1週間かけて完成したプログラム。仮想通貨界隈、Webエンジニア界隈、VTuber界隈など、カテゴリで切ってインフルエンサーのランキングを作っています。プログラム内容としては、TwitterAPIを叩いてアカウントのフォロワー数や誰をフォローしているかなどのデータを取得し、界隈の中でどの程度の影響力があるのかを算出してGoogle Spread Sheetに書き込んでいっています。Google Spread Sheetでのデータ管理は、どの要素で並び替えするか簡単に設定できる・データ不整合があったら簡単に書き換えられる・パッとデータを見れるという点で重宝するので、簡単なデータ保存にはうってつけでした。

ちなみに、Twitterで収集しやすいカテゴリと収集しにくいカテゴリがあることも発見できました。

【収集できた】
ブロガー、コスプレイヤー、仮想通貨、Webエンジニア、Webデザイナー、VTuber、起業家、投資家、筋トレ、声優、写真家、映画、アニメ、マンガ、美容師、ユーチューバー、エロ屋
【収集できなかった】
フリーランス、研究者、歌手、モデル、ダンサー、芸人、カレー、旅人、大学生、高校生、会社、役者

界隈の人同士でフォローしあっているアカウントが多いカテゴリは収集しやすかったですが、界隈を超えてフォローしあっている人が多いカテゴリの収集は界隈に関係ないアカウントが複数含まれてしまって収集ができませんでした。芸能人は芸人やモデルもフォローしてるから、界隈のインフルエンサーとして収集できないみたいな(T ^ T)

そもそもなんでインフルエンサーデータ収集してるの?という話はこちらに書いています。

初めて学んだ技術

・API:Sheet APIへのアクセス方法とデータの扱い方


はてなブログランキングページデータ取得プログラム

f:id:virtual-surfer:20180708091057p:plain

今動かしているプログラム。毎週はてな社が投稿しているはてなブログランキングのページ情報をスクレイピングして、よく読まれている記事データを取得しています。

「よく読まれている記事を分析して、アレンジして自分のブログに取り込めそうな点を学ぶ」っていうのは全ブロガーがやっている作業かと思いますが、その作業をプログラム化できないかなと挑戦中。よく読まれる記事の特徴を学んで、よく読まれる記事をアレンジした記事を自動で生成してくれるプログラムを作れば、それこそ不労ブロガーが誕生して、VTuberならぬVブロガーが生み出せるのではないかと画策してます _φ(-^v^-

初めて学んだ技術

・スクレイピング:Beautiful Soup


半年間Pythonを趣味で書いてきての学び

半年間で以上のようなプログラムを書いて運用してきたわけですが、そこで学んだことをメモがてらまとめておきます。これから趣味でPythonを書こうとしてる人の参考になれば。


自分の実生活に役立つ or 検証してみたいプログラムを書く

マジでこれが一番大事。趣味で開発する分には誰にも急かされることもFBされることもないので、自分の生活の役に立つものを書かないとモチベーションが継続できず、好奇心を持って新しい技術に挑戦してみたり、最後までプログラムを書ききることができません。その結果、ググって見つけたコードを実行してみてちょっと動かして飽きるの無限ループを繰り返し、全然技術が上がらない状況になったり、せっかくプログラムを書いたのに生活に関係ないものだから書いてそこで終わり(その後運用しないこと)になりがちです。僕も最初はググって出てきたコードをコピペして動かしてみることばかりしていたのですが、自分の生活を楽にしてくれるものや、普段の作業を効率化してくれるものじゃないと学びが増えないなと気づき、ググって出てくるか関係なしに自分の興味のあるものだけを書き続けました。

自分の作りたいものを具体的に考えていくと、ググっても作りたいもののプログラムが出てこない(もしくは、英語での情報しかない)ことが多いので、否が応でもドキュメントを読んで学んでいくことが強いられ、技術力は向上していったように感じます。

自分の興味あるものを開発すること、運用し続けること、大事。


API・初めて使う技術は壁にぶつかり次第、ドキュメントを読もう

賛否両論あるかもなんですが、僕はこのスタンスでやっています。普段の業務では、「技術触る前から、公式ドキュメント読めよ。」と言われるのですが、趣味で開発していく上で最初からドキュメントを読んでいると、せっかくの開発のモチベーションが萎えていきます(僕はそうでした)。とはいえ、公式ドキュメントを読まずに、ググって出てきた個人が書いている情報を参考にしてプログラムを書くと、APIアクセス制限の情報が古くてアクセス制限に引っかかったり、もっと有用なライブラリがあるのに回りくどいコードを書いてしまったりしがちです。

なので、ある程度コードを書き進めた段階で、「あれ?これってこんなにめんどくさい書き方する必要ある?」とか「APIアクセスしてどんな場合はどんなレスポンスが返ってくるんだろ?」と疑問に思ったらその時に公式ドキュメントを読むべしです。よくする処理に関しては大抵便利なメソッドが用意されているし、あれ?と立ち止まった時には公式ドキュメントに答えが書いてあることが多いです。

公式ドキュメントが英語しかなくて、英語苦手なんだよ〜。という方こそ英語ドキュメント読むべしです。趣味で興味ある技術を触ってドキュメントを読むのを癖にしておくと、仕事で興味ない実装でもドキュメント読むのが習慣になるので。


開発したプログラムは、書き終わったらブログなどにまとめよう

これやってみて価値を実感しました。「一度書いたコード・一度はまったエラーはもう2度と間違えないだろう。」と思って、その場の実装・エラー解決だけして特に文章にまとめることなどせずにおくことが多いと思うのですが、2ヶ月後などに全く同じエラーにはまって解決方法に悩む → 過去解決できた方法を思い出そうとする → 思い出せない → 仕方なく再度ググって調べる ...結局またエラー解決に時間かかってんじゃん...。となってしまいがちです。

こうならないためにも、一度自分がはまったこと、実装に悩んだ箇所などは何かしらいつでもアクセスできる場所にまとめておいた方がいいです。自分でまとめて公開しておけば、どこにあったか覚えているので、パッと情報を参照できるし、同じような悩みを持った人が結構な頻度で記事にアクセスしてきてPV稼げ...人の解決に役立つことができます。

情報を再整理しておこう。


まとめ

以上、趣味で半年間Pythonを書いてきて作ったものと学んだことのまとめでした。

最後に、こんなにも最高な技術を作ってくれたPythonの創造者 Guido van Rossumさんの名言と最近のツイートを紹介して終わります。


困難のために会社を辞めたことはあっても、プロジェクトを止めたことはない。
いつもPythonのプロジェクトは次の会社で続けていた。



では!