人生初のAPIチャレンジ!
企画意図 「エンジニアがどんなことを考えている人たちなのか知りたい」
さて、私はプログラミングのプの字も知らないおじさんですが、プロトタイピングを学ぶことにしました。そして、はじめはAPIなるものに向き合うことにしたのですが、いろいろな疑問が湧いてきました。
「そもそも、QiitaAPIで何ができるの?」「エンジニアは、主に何を考えて生きているの?」と素朴な疑問が次々と。
そこで、まずは、投稿記事のタイトルをAPIで引っ張ってきて、ワードクラウドか何かに放り込んで、エンジニアの脳内を覗き込んでみることにしました。
ただ、あまりAPIでデータを引っ張ってくると、Qiitaに怒られるということなので、毎年のあの夏(8月)に投稿された記事タイトルを引っぱり分析することにしました。
そして、あの夏のワードクラウドを並べて、その時期にエンジニアを夢中にしていた事象を浮き彫りにできたらと考えています。いわばQiitaユーザの勝手流行語大賞(夏)を作るイメージです。
夏だから、きっと「サーフィン」とか「ナンパ」とか「花火」とか、そんなワードが上位に来るのでしょうか?
それでは、実装へ向かって歩を進めます。
(後半の、ワードクラウド処理で出てきた画像をティザー的にチラ見せしておきます。最頻出単語はなんと、あの!)
STEP.1 Qiita APIを使い、夏(8月)に投稿された記事タイトルを1年ごとに抜き出してくる。
まずは、この最新100件の記事タイトルを吐き出すコードを元に考えていきます。この段階で、件数の指定と、タイトル名を引っ張ることはできるようになったので、そこに、一定の日時(8月1日〜8月31日)を指定してタイトルを引っ張ってくる方法を考えていきます。
// axiosモジュールを読み込む
const axios = require('axios');
// main()関数を定義する
async function main() {
let response = await axios.get('https://qiita.com/api/v2/items?page=1&per_page=100&title');
// 結果を出力する(繰り返し)
for (let i=0; i<response.data.length; i++) {
console.log(response.data[i].title);
}
}
main();
日曜の全てと、平日仕事の後の全ての時間を溶かし、睡眠時間も毎日2時間ずつ削って、スーパーへ買い出しに行ってほしそうな妻も見て見ぬ振りをし、リソースを全投入し調べていきました。
STEP2 「QiitaAPI」仕様書の森をさまよう
API仕様書を読み込もうとしたのですが、簡潔な記述のため「プログラミング」の「プ」の字もわからない自分には、何言ってるのかわからず、nodeしてリターンしても、ターミナルはすました顔のまま。設定した締切の日にちだけがせまり、焦りを隠せませんでした。
GET /api/v2/itemsの項目を見ればいいですよと、最高の援護射撃もいただいたのですが、
呪文の羅列のように見えて、駄目でした。もっと時間がある時に、しっかりと調べて掘り下げようと思います。
ちきしょーーーーー!
STEP3 企画の変更「最近のQiitaユーザーの脳内をワードクラウド化しよう」
というわけで、技術的制約により、企画自体をこじんまりとさせて完成を目指します。
// axiosモジュールを読み込む
const axios = require('axios');
// main()関数を定義する
async function main() {
let response = await axios.get('https://qiita.com/api/v2/items?page=1&per_page=100&title');
// 結果を出力する(繰り返し)
for (let i=0; i<response.data.length; i++) {
console.log(response.data[i].title);
}
}
main();
まず基本のコードをもとに
items?page=1
items?page=2
items?page=3
と変更し、100件ずつ最新の記事タイトルを取っていきました。
ざざっと、積み上げて500件。 16651文字のテキストになりました。
STEP4 タイトルをワードクラウドサービスに放り込む
前述の通り、私にプログラミング技術はないので、ワードクラウドの既存WEBサービスがあるだろうと予想のもとにググります。
ありましたね!ありがてー。
今回はこちらの、「UserLocal AIテキストマイニング」というサービスを使うことにしました。
https://textmining.userlocal.jp/
ここに、先程APIで抜いてきたタイトル群を放り込みます。無料版では1万字までしか、解析できないので6000字ほど削りました。(だいたい300記事分ぐらいです。)
そして、後はクリックするだけです。
STEP5 「ワードクラウドを観察する」
エンジニアのことは全てわかりました。だいたいPythonとFlutterのことを考えています。
頻出名詞はこちらです。改めてPythonが強いですね。4位という、高順位に「エラー」というネガティブなワードが入っています。エンジニアは後ろ向きな性格のようです。
使う!作る!できる!試す!動く!などが高い位置に来ます。とても前向きなバイブスを感じ、何かを作り出そうという強い意志を感じますね。
エンジニアは、あまりものごとを形容しないようです。感性的なふわっとした表現はノイズなのです。きっとポエムを憎んでいるでしょう。
結論
休日と、平日夜と睡眠時間を全て溶かした結果、エンジニアの全てがわかりました。
「エンジニアはとにかくPythonが好きです。エラーを強く警戒しがちで、後ろ向きに見えますが、物を作り出すことに強い意欲を持っています。また、すべての行動で何かを生み出そうとします。そして形容詞などを嫌いポエムを憎む人たちです。」
反省
技術的制約によってやりたいことができなかったのですが、本文を分析に使うと、もっとエンジニアの生の声が拾えたのではと思います。ただ、文字数が多く、この無料ツールだと10000文字という分析の上限もあり、処理が難しそうなので、いつでも何かを生み出したいエンジニアの方に是非トライしてもらい、そのコードを教えてほしいです。
また、技術ブログでない一般ブログなどからテキストを抽出して解析、比較すると、よりエンジニアと非エンジニアの属性の違いが見えるのではと思います。ポエムを憎むエンジニアの方に是非トライしてもらい、そのコードを教えてほしいです。
私、個人としてはJSなどをもう少し勉強し「あいうえお」ぐらいはわかるようにしないと、しんどいなという感覚があるので、空いている時間で少し自習をせねばと思っています。
定番らしいのですが、この辺りのサイトで自習をすると良いそうです。
ドットインストール
https://dotinstall.com/
プロゲート
https://prog-8.com/
がんばれよ!俺。
おまけ
ワードマイニングの過程で出てきた、他の分析を共有しておきます。
私にはよくわからないのですが、エンジニアの方が見ると、あるあるが浮かび上がっているのかも知れないです。知らんけど。
それでは、また次の試練で会いましょう!!