PythonでQiita APIを叩いて初心者向け記事を一覧取得したあと、神記事たちを参拝していく

## はじめに

Qiitaの「初心者」タグや「新人プログラマ応援」タグの初心者向け記事は新人QAエンジニアの私にはとても参考になるものばかり。
ただ残念なことに、個別タグページにはトレンドと新着記事しか載っておらず、過去の良記事を探しにくい仕様になっています。

本記事では、まずQiita APIを使って初心者向け記事(:=「初心者」OR「新人プログラマ応援」タグのついた記事)を全て出力するプログラムを作成したのち、次に出力リストの各記事をいいねの多い順に読んでいった結果「これはとんでもなく参考になる！」と感じた神記事たちを紹介していきます。

*※注：今回はいいね数でフィルタしてますが、あなたの為になった記事はいいね数にかかわらず神記事ですよ!!*

### やりたいこと

1. 初心者向け記事を全部取ってきてCSVに出力する
2. 表計算ソフトでCSVを読み込み、リストを「いいね回数が多い順」に降順ソートする
3. 上から順に参拝する

## プログラムを作る

### どうすれば「初心者向け記事を全部取ってきてCSVに出力」できそうか検討する
シンプルにこんな感じで考えてみました。

1. 「初心者」タグOR「新人プログラマ応援」タグがついた記事をAPIで全部取得する
2.  必要なデータだけを抽出する
3.  データをCSVに書き出す

### APIの仕様を読んで、データの取得方法と必要なデータを検討する

[Qiita APIの公式ドキュメント](https://qiita.com/api/v2/docs#%E6%8A%95%E7%A8%BF)を読むと以下が分かります。

* "GET /api/v2/items"に、ページ数とタグを入れた検索クエリを投げれば記事が取得できる
* 要素数(記事数)の合計は Total-Count レスポンスヘッダに含まれる
  + 最初に検索クエリを投げて記事数を取得して、それをページ数に変換すれば全記事を取得できる
* 今回の目的には取得した各記事の以下のデータがあれば十分
  + title
  + url
  + tags
     - titleだけだと内容がぱっと見で分からないケースがあるため、補足情報として
  + updated_at
     - 技術情報で古すぎる内容は仕様が変更になっていないか確認が必要なため
  + likes_count
     - 記事数が膨大なため、スクリーニングに

### ちょちょいと実装する

**[上記検討をもとに実装したコードとその解説、サンプル出力ファイルをGitHubにおきました。](https://github.com/Yaboxi/PyQiitaSearch)**

実装にあたっては下記の記事を参考にさせていただきました。ありがとうございます！
[Qiitaで自分が投稿した記事の一覧を得る](https://qiita.com/kumarstack55/items/73119fe8b6e43fd4b21f)

## 参拝する

Pythonでリストを操作してもいいのですが、面倒なので今回は表計算ソフトでCSVを読み込んで編集していきます。
適当にヘッダ列をつけて、いいね順で降順ソートしたら終わりです。あとは上からURLを巡っていきます。
自分の場合、読んで気に入った記事は"いいね"+テーブル上で色付けしてました。

2019年11月20日時点で取得できた記事総数は8642件！
全部を読むのは到底無理だったので、
今回は2019年11月20日時点で1000いいね以上を獲得していた75記事を読んでいきました。

## 厳選!!スーパー神記事リスト

以下のリストが75件の神記事を読み込んで、私が特に感銘を受けた22件の超・神記事たちです！
(ちょっと多いですがこれでも重複内容を削る等かなり厳選しました)
ざっくりと内容でカテゴリ分けしています。

### 仕事のすすめかた
  + [未経験者が認識してなさそうなTIPS](https://qiita.com/Nao9syu/items/0950527548a08ff9d8c9)
     - 仕事に限らず生活面まで含めたアドバイス集。技術力よりも生活力が大事な気がしています。
  + [プログラミング勉強を加速させる7つの習慣](https://qiita.com/YudaiTsukamoto/items/42a8df22ca4c6b327dfd)
     - "プログラミング勉強"と銘打っていますが、どんな種類の勉強にも通ずるものだと思います。
  + [新卒の子にどこまで勉強すれば良いですかね？と聞かれた件](https://qiita.com/daijinload/items/0ee132950087da9366df)
     - キャリア論寄り。"自分の立ち位置を決める"ことの重要さに気付かされます。
  + [【SIer新人向け】研修では教えてくれないノウハウ集](https://qiita.com/old-stone/items/6221824566116710453f)
     - 自分が働いているところがWeb系よりSIerに近いのでかなり納得感がありました。
  + [初心者プログラマが犯しがちな過ち25選](https://qiita.com/rana_kualu/items/379eefb3a40c6b44cb92)
     - 開発者向けですがQA視点でもすごく参考になります。初心者じゃなくてもよく犯していたり…。
  + [新卒のトレーナーをするときの個人的まとめ](https://qiita.com/mad_khaki/items/eba0450c66fc59de2d1d)
     - 新人側がトレーナー視点や評価者視点を知っておくと取るべき行動が分かる説。

### ドキュメントの書き方
  + [ドキュメント作成時のあるあるアンチパターン20](https://qiita.com/tamikura@github/items/625b94b6046113403728)
     - ちゃんと日本語書いてなくてごめんなさい。
  + [レビュー前に直して欲しい日本語の問題点８つ](https://qiita.com/tonluqclml/items/bc63c294dda6010b63e9)
     - ちゃんと日本語書いてなくてごめんなさい(Reprise)
  + [エンジニア歴20数年の私が、設計書を書く際に心がけていること](https://qiita.com/y-some/items/90651c1e27f7798f87c6)
     - ドキュメントを書く際の具体的なTips。これを意識するだけでも相当読みやすくなりそう。

### プログラミング
  + [新しく言語を学ぶときに心がけていること](https://qiita.com/hiraike32/items/40ef06f85f6a63828985)
     - 具体的な「プログラミング言語の学び方」。いきなり書籍を買うのではなくまずこの記事をチェック。
  + [プログラミング入門者からの卒業試験は『ブラックジャック』を開発すべし](https://qiita.com/hirossyi73/items/cf8648c31898216312e5)
     - 面白そうなので今度Pythonで作ります。
  + [リーダブルコードを3年ぶりに読み返してみて見つけた たった1つの大原則](https://qiita.com/HiromuMasuda0228/items/f80e4ac45b9160c33013)
     - 良いコードを書きたい欲が出てきたら必ず読みたい。
  + [私たちはどうして公式ドキュメントが読めないのか？](https://qiita.com/hiraike32/items/f0a211cceb0ecc516b6c)
     - ググったこと公式に書いてあるやんけ、ってあるあるですよね。困ったらまず公式をチェックするクセをつけたいところ。

### コンピュータサイエンス *〜結局ここに至る〜*
  + [アルゴリズムとは何か！？ ～ 文系理系問わず楽しめる精選 6 問 ～](https://qiita.com/drken/items/f909b79ee03e679c7142)
     - 競プロの問題を題材に純粋におもしろい+超重要なアルゴリズムが扱われています。
  + [ソートを極める！ 〜 なぜソートを学ぶのか 〜](https://qiita.com/drken/items/44c60118ab3703f7727f)
     - アルゴリズムといえばソート。学生時代を思い出しますね(血涙)
  + [[初心者向け] プログラムの計算量を求める方法](https://qiita.com/cotrpepe/items/1f4c38cc9d3e3a5f5e9c)
     - アルゴリズムの勉強をしていると出てくる件のオーダーとかいうやつのお話です。

### 書籍/記事まとめ
  + [Webエンジニア1年目の自分に捧げたい本・記事を超まとめ](https://qiita.com/virtual_techX/items/35034d28cdb9255367ba)
     - Webエンジニアに役立つ知識を多種多様なジャンルから網羅的に紹介。経験3年でここまで広範に押さえられるのかと割と絶望しました。
  + [個人的に超絶為になったので新人エンジニアに勧めたい記事まとめ](https://qiita.com/shimajiri/items/501828dc8d589e214470)
     - おすすめ記事まとめ。全部必読。
  + [[翻訳] 技術向上ガイド](https://qiita.com/side/items/6df059bdbc3c1db0a334)
     - 主に海外のプログラミング/コンピュータサイエンスサービスの紹介が中心。この機会にあわせて英語も勉強しましょう!

### 情報収集/発信
  + [エンジニアの情報収集法まとめ](https://qiita.com/nesheep5/items/e7196ba496e59bb2aa28)
     - とりあえず全部RSS登録したりフォローしたりしました。
  + [エンジニアは全員技術記事を書くことを習慣化した方がいいぞ](https://qiita.com/HiromuMasuda0228/items/a71dea7ef4d77a30b118)
     - "記事を書いた人が勝つ"の言葉が印象的。自分はしょうもないネタでも記事にまとめるようにしだしました。
  + [3年かけてたどり着いた英語記事を読むための方法](https://qiita.com/tomoyamachi/items/cdb2ccb78c6c9651e0ab)
     - 英語記事を読めるようになるとアクセスできる情報が爆発的に増えますよね。

## 読んでみての感想

いわゆる「バズった」記事を上から順に読んでみたのですが、
*「いっしょに働く相手をちゃんとリスペクトしましょう」**「日本語ちゃんと書きましょう」*
*「コンピュータサイエンスちゃんと学びましょう」*などなど、実は言ってることはどれも似通っている気がします。
**本質は意外とシンプルだったりするよな〜**、なんて。

同時に記事を読んだだけで満足するんじゃなくて、実際に行動に移していかんですね。
長い道のりになりそうですが、急いても仕方ないので、地道にやっていこうと思います…！