Edited at

Qiitaのいろいろランキング2018


はじめに

早いもので2018年も終わりに近づきました。

個人的な恒例と化してきたQiitaランキング記事を今年も書いていこうと思います。

これまでのものはこちら。

この記事を書くにあたり、いつものようにデータを集めていますが 2018年12月22日あたり のデータになっています。ご認識ください。


やること

昨年時点でぱっと思いつくランキングはやってしまったので、基本的にやることは昨年と同じです。


  • ユーザ別Contributionランキング

  • ユーザ別記事数ランキング

  • ユーザ別フォロワーランキング

  • 記事別いいねランキング

  • その他分析いろいろ

枠組み自体は昨年と同じものを使うので、昨年からの推移に着目しようかと思います。

あとは今年の新しい分析として、 organizations ランキングもやってみます。

弊社 も非公式ながらorganizationを作り、 Advent Calendar にもエントリーできたので、やってみたいなと思った次第です。


前準備

例によってシェル芸で分析をしていくのですが、いかんせんデータが多いので事前に準備をしておきます。

昨年使ったデータ収集シェル芸は当然使えなくなっていたので、少し手直しをしつつデータを集めておきます。

ここから先のデータフォーマットは 昨年 同様ですので、昨年のシェル芸がそのまま使えるというわけです。ありがたい。


qiita_user_data.csv

$ grep t_nakayama0714 qiita_user_data.csv

t_nakayama0714,38,9744,270,[エンジニアなら知っておきたい、絵で見てわかるセキュア通信の基本](https://qiita.com/t_nakayama0714/items/83ac0b12ced9e7083927):3593,[不思議の国のSE用語](https://qiita.com/t_nakayama0714/items/478a8ed3a9ae143ad854):1843,[Ansibleをはじめる人に。](https://qiita.com/t_nakayama0714/items/fe55ee56d6446f67113c):978,[NoSQLについて 勉強する。](https://qiita.com/t_nakayama0714/items/0ff7644666f0122cfba1):702,[無料で整える趣味チームの開発環境](https://qiita.com/t_nakayama0714/items/c0eb5e298524c127bccd):376

ちなみに昨年の集計時点(2017年12月12日)では 200,902 ユーザが存在していましたが、今年は

$ wc -l qiita_user_data.csv

299396 qiita_user_data.csv

ということで、この1年で 約10万ユーザを伸ばした ようです。


ユーザ分析

ではまずはユーザごとの分析からいきましょう。


ユーザContributionランキング

ランク
前年比
ユーザ名
総Contribution
前年比
記事数
平均いいね
Top数
Top占有率
Top記事

1
0
@jnchito
42002
+8169
217
193.558
2884
6.86634%
モデルやメソッドに名前を付けるときは英語の品詞に気をつけよう

2
0
@hirokidaichi
40739
+7556
38
1072.08
6410
15.7343%
ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習

3
0
@icoxfog417
32733
+4837
150
218.22
3406
10.4054%
Pythonを書き始める前に見るべきTips

4
0
@suin
27999
+5468
862
32.4814
4811
17.1828%
【まとめ】これ知らないプログラマって損してんなって思う汎用的なツール 100超

5
0
@shu223
21669
+1826
203
106.744
1398
6.4516%
ディープラーニングの有名ライブラリ5種を最短距離で試す半日コース(TensorFlow, Chainer, Caffe, DeepDream, 画風変換)

6
+1
@mizchi
21312
+3721
250
85.248
2095
9.83014%
なぜ仮想DOMという概念が俺達の魂を震えさせるのか

7
+39
@rana_kualu
20385
+12901
273
74.6703
2528
12.4013%
2017年のフロントエンドエンジニアならこの程度は知ってて当然だよな?

8
+1
@mpyw
20245
+3193
281
72.0463
2311
11.4152%
PHPでデータベースに接続するときのまとめ

9
+2
@opengl-8080
19889
+3100
264
75.3371
1245
6.25974%
AngularJS使い方メモ

10
-4
@KeithYokoma
19457
+1214
143
136.063
5319
27.3372%
うまくメソッド名を付けるための参考情報

11
-1
@kenju
18899
+2035
120
157.492
2619
13.8579%
中上級者になるためのJavaScript【知識編】

12
-4
@yuku_t
18658
+1498
205
91.0146
1622
8.69332%
中規模Web開発のためのMVC分割とレイヤアーキテクチャ

13
-1
@awakia
17042
+1215
154
110.662
1644
9.64676%
開発フロー研修 @ Wantedly

14
-1
@mono0926
15707
+870
94
167.096
1397
8.89412%
ローディング時のズルい進捗表示

15
-1
@b4b4r07
14746
+1619
57
258.702
1692
11.4743%
さいつよのターミナル環境を構築しよう

16
0
@cognitom
14636
+1591
97
150.887
2066
14.1159%
そろそろ真面目に、HTMLで帳票を描く話をしようか

17
-2
@muran001
14192
+1114
34
417.412
5136
36.1894%
Gitでやらかした時に使える19個の奥義

18
0
@edo_m18
14127
+1493
390
36.2231
1338
9.47123%
WebのUIテスト自動化 - Seleniumを使ってみる

19
0
@koher
14075
+2073
69
203.986
1559
11.0764%
null安全でない言語は、もはやレガシー言語だ

20
-3
@haminiku
13906
+893
73
190.493
3097
22.271%
2016年 独りで新規WEBサービスを開発・運用した際の知見

21
+2
@zaru
13862
+2364
142
97.6197
1657
11.9535%
Webフロントエンド表示速度、最速化手法まとめ

22
-1
@kazunori279
12197
+561
43
283.651
1320
10.8223%
Cloud Vision APIの凄さを伝えるべくRasPi botとビデオを作った話

23
-1
@susieyy
12092
+548
50
241.84
2039
16.8624%
Swiftで作られたイケてるUIライブラリたち

24
+3
@kenmatsu4
12050
+2060
66
182.576
1725
14.3154%
【機械学習】ディープラーニング フレームワークChainerを試しながら解説してみる。

25
-5
@appwatcher
11978
+148
60
199.633
2133
17.8076%
iOSでこんなアプリ,こんな機能を作りたかったらこれを見ろ!作りたいアプリに対応するクラス、フレームワーク、ライブラリのまとめ!

26
+35
@shibukawa
11906
+5647
113
105.363
3671
30.8332%
イマドキのJavaScriptの書き方2018

27
+3
@takeharu
11750
+2053
18
652.778
1745
14.8511%
JavaScriptの「this」は「4種類」??

28
-4
@yimajo
11730
+675
163
71.9632
755
6.43649%
iOS実機のSSL通信をプロキシによって傍受したり改ざんする方法

29
-3
@hshimo
11078
+1057
307
36.0847
2671
24.1109%
プログラマが独立・起業する時によくするミスと対策 まとめ

30
-2
@ynakayama
11005
+1116
195
56.4359
792
7.19673%
scikit-learn から学ぶ機械学習の手法の概要

31
-6
@kawasima
10993
+797
82
134.061
1059
9.6334%
GitHub English Challenge Cheat Sheet

32
+3
@tadsan
10799
+1608
192
56.2448
1995
18.4739%
ライセンスの選択を恐れる必要はありません

33
-2
@uasi
10607
+936
118
89.8898
2321
21.8178%
英語のコメントや issue で頻出する略語の意味 (FYI, AFAIK, ...)

34
-5
@hkusu
10426
+655
218
47.8257
963
9.23652%
[WEB開発] 私的な最近のおすすめサービス/ツール 14選 ~2014年版~

35
-3
@kidach1
10410
+808
85
122.471
1374
13.1988%
Nginx導入時やること

36

@poly_soft
10376

40
259.4
2550
24.5759%
2018年の最先端バックエンドエンジニアに必要なスキルについて考えてみました。

37
+2
@tonkotsuboy_com
10297
+2270
114
90.3246
974
9.45907%
GitHubのmasterブランチをWebページとして公開する手順(GitHub Pages)

38
-5
@joker1007
10159
+620
105
96.7524
1162
11.4381%
てめえらのRailsはオブジェクト指向じゃねえ!まずはCallbackクラス、Validatorクラスを活用しろ!

39
+10
@Hironsan
10142
+2856
50
202.84
1231
12.1376%
学年ビリのアホが1年半でTOEICスコアを300点から840点に上げた英語勉強法の話

40
-6
@tukiyo3
10097
+796
1603
6.29881
490
4.85293%
たくさんあるオープンソースライセンスのそれぞれの特徴のまとめ

41
+14
@t_nakayama0714
9744
+3023
38
256.421
3593
36.874%
エンジニアなら知っておきたい、絵で見てわかるセキュア通信の基本

42
+23
@kazukichi
9713
+3774
37
262.514
3234
33.2956%
エンジニアで稼ぐために大切な20のコト

43
+13
@tag1216
9706
+2995
110
88.2364
3194
32.9075%
インフラエンジニアじゃなくても押さえておきたいSSHの基礎知識

44
-8
@usagimaru
9650
+1069
177
54.5198
1245
12.9016%
iOS ヒューマンインターフェースの原則

45
-3
@Quramy
9551
+1779
94
101.606
2225
23.296%
Electronでアプリケーションを作ってみよう

46
+1
@Qiita
9357
+1972
5
1871.4
7277
77.7707%
Markdown記法 チートシート

47

@youwht
9234

23
401.478
1659
17.9662%
「赤の他人」の対義語は「白い恋人」 これを自動生成したい物語

48
-11
@kawaz
9003
+760
146
61.6644
2045
22.7147%
最強のSSH踏み台設定

49
-8
@zembutsu
8955
+1032
102
87.7941
1319
14.7292%
Docker 入門ハンズオン資料

50
+14
@howdy39
8887
+2908
69
128.797
1308
14.7181%
フロントエンドにテストを導入

51

@drken
8851

36
245.861
1360
15.3655%
AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~

52
-9
@sion_cojp
8774
+1044
41
214
4226
48.165%
インフラエンジニアとしてよく使うコマンド集

53
-9
@vvakame
8773
+1139
55
159.509
1501
17.1093%
Gradle入門

54
-6
@y_hokkey
8627
+1337
61
141.426
1690
19.5897%
Dockerで即実行できる、社内・自宅向けオープンソースWebアプリ

55
+5
@amay077
8600
+2148
289
29.7578
598
6.95349%
Xamarin(ザマリン) とはなんぞや

56
-18
@okappy
8477
+379
29
292.31
5940
70.072%
非デザイナーエンジニアが一人でWebサービスを作るときに便利なツール32選

57
-7
@tbpgr
8477
+1237
746
11.3633
1511
17.8247%
Markdown記法 サンプル集

58

@jabba
8444

35
241.257
2706
32.0464%
開設後3週間で収益10万円を得た個人開発サイトでやったことの全部を公開する

59
-2
@n0bisuke
8060
+1477
327
24.6483
723
8.97022%
3行のソースコードを入れるだけで機械学習できると噂のindicoをNode.jsで使って機械学習入門してみる

60
+24
@TakahikoKawasaki
7912
+2938
28
282.571
2620
33.1143%
一番分かりやすい OAuth の説明

61
-16
@syui
7900
+365
228
34.6491
1377
17.4304%
MacBookAirで使っている便利ツール

62
-11
@kaiinui
7640
+449
47
162.553
2462
32.2251%
最近の行儀のよい JavaScript の書き方

63
-9
@yuya_presto
7556
+745
40
188.9
828
10.9582%
Gitコンフリクト解消ガイド(git mergetoolの使い方)

64
-2
@jacksuzuki
7541
+1423
5
1508.2
7528
99.8276%
ロシアの天才ハッカーによる【新人エンジニアサバイバルガイド】

65
-12
@tatesuke
7541
+668
41
183.927
2327
30.858%
You Don't Need jQuery

66

@tmknom
7501

11
681.909
2850
37.9949%
AWSアカウントを取得したら速攻でやっておくべき初期設定まとめ

67
-15
@Jxck_
7446
+454
62
120.097
1269
17.0427%
DELETE_FLAG を付ける前に確認したいこと。

68

@ryuichi1208
7208

51
141.333
1887
26.1792%
エンジニアが情報収集とトレンドを追うのに読むと良いサイト

69
+13
@shizuma
7100
+1974
102
69.6078
857
12.0704%
GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~

70
-12
@gogotanaka
7028
+457
57
123.298
3589
51.0672%
ネイティブと働いて分かった英語コミットメッセージの頻出動詞10つ

71
-1
@mochizukikotaro
6874
+1420
261
26.3372
1213
17.6462%
初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。

72
+5
@tenntenn
6832
+1479
78
87.5897
2487
36.4022%
Go言語の初心者が見ると幸せになれる場所 #golang

73
+21
@zaburo
6775
+2038
309
21.9256
441
6.50923%
gitでシンプルなデプロイ環境を作る

74

@okunokentaro
6750

110
61.3636
1351
20.0148%
AngularJSモダンプラクティス

75
+4
@ukiuni@github
6704
+1437
77
87.0649
2645
39.4541%
JavaScriptを読んでて「なにこれ!?」と思うけれど調べられない記法8選。

76
-2
@disc99
6684
+1268
29
230.483
2085
31.1939%
Javaを使うなら知っておきたい技術、フレームワーク、ライブラリ、ツールまとめ

77
+4
@pugiemonn
6667
+1523
283
23.5583
1186
17.7891%
こんなHTMLとCSSのコーディング規約で書きたい

78

@terrierscript
6634

131
50.6412
422
6.36117%
【古い記事】Babelにおける import / export

79
+14
@nonbiri15
6463
+1651
292
22.1336
1447
22.389%
優秀な技術者を追い出してしまう方法

80
-2
@hik0107
6452
+1130
22
293.273
969
15.0186%
Pythonでデータ分析するのに必要なツールのまとめ

81
-18
@yaotti
6384
+274
151
42.2781
1292
20.2381%
gitでありがちな問題の解決方法まとめ

82
-11
@nekoneko-wanwan
6324
+872
56
112.929
1598
25.2688%
はじめてajaxを使うときに知りたかったこと

83
+15
@takahirom
6322
+1700
93
67.9785
395
6.24802%
AndroidStudioのPostfix Completionで爆速コーディング

84
+11
@shuntaro_tamura
6300
+1583
64
98.4375
939
14.9048%
フロントエンド、サーバサイド、インフラの具体例

85
-18
@magicant
6288
+580
37
169.946
2286
36.355%
クラスの命名のアンチパターン

86

@alt
6163

0
-
-
*** %
-

87

@Ted-HM
6124

16
382.75
4591
74.9673%
プログラミングでよく使う英単語のまとめ【随時更新】

88
-13
@hidekuro
6103
+701
82
74.4268
2618
42.8969%
VagrantとDockerについて名前しか知らなかったので試した

89
-23
@r7kamura
6088
+229
56
108.714
720
11.8265%
RailsでAPIをつくるときのエラー処理

90
-21
@koba04
6043
+527
38
159.026
779
12.8909%
私のJavaScript情報の集め方

91
-23
@daxanya1
5990
+372
30
199.667
4806
80.2337%
数学を避けてきた社会人プログラマが機械学習の勉強を始める際の最短経路

92
-19
@koogawa
5987
+540
70
85.5286
1351
22.5656%
iPhoneアプリ申請やAppleの審査に関するメモ

93
-6
@ryounagaoka
5923
+964
47
126.021
2336
39.4395%
もう逃げない。HTMLのviewportをちゃんと理解する

94

@toshihirock
5920

213
27.7934
913
15.4223%
Linuxパフォーマンス調査などで使うコマンドメモ

95
-23
@voluntas
5794
+343
107
54.1495
1328
22.9203%
docker コマンド チートシート

96

@soarflat
5744

26
220.923
979
17.0439%
webpack 4 入門

97
-14
@colorrabbit
5732
+668
253
22.6561
843
14.7069%
覚えておきたい Vim コマンド 備忘録

98
-6
@k0kubun
5652
+836
65
86.9538
1291
22.8415%
ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い

99

@akameco
5628

177
31.7966
1219
21.6596%
Herokuでbotを運用する時代は終わった。これからはIBM Bluemixを使って無料で運用する

100

@yoshizaki_kkgk
5624

41
137.171
1221
21.7105%
機械学習案件を納品するのは、そんなに簡単な話じゃないから気をつけて

僕は昨年の55位から41位にランクアップ。やったね。

今年一番の驚きは @alt さんが「 記事0でTop100にランクイン 」を果たしたことでした。

最初集計をミスったかと思ったのですが、編集リクエストの積み重ねから Contribution を増やしているようです。

どこかで見たことあるなー、と思って自分の記事の編集履歴を見てみたところ、僕にも編集リクエストをいただいていました。

多くはシンタックスハイライトやtypo修正など、軽微と言えば軽微ですが、Qiitaプラットフォームにおける記事の質を上げたという意味ではこれもContributionそのものだなと思いました。


TOP100順位の上下

昨年との順位変動の傾向としては以下のように、

上昇
下降
維持
新規

2018
26
52
8
14

2017
43
42
4
11


-17
+10
+4
+3

となりました。

昨年も順位変動については見ていましたが、 上昇ユーザが減少 し、 下降ユーザ、新規ユーザが増加 しています。

TOP5が変わっていないことからも、「トップランカーの牙城はより強固になる一方、下位ユーザの入れ替わりが激しくなっている」という傾向が見て取れます。

2018年で順位変動が最も大きかったのが @rana_kualu さんでした。

2017年のフロントエンドエンジニアならこの程度は知ってて当然だよな? に続く、 2018年のフロントエンドエンジニアならこの程度は知ってて当然だよな? など、技術トレンドを俯瞰する記事の多くが1000いいねを獲得するなど、2018年でContributionを12901伸ばし、一気に39位も順位を上げたようです。


Contributionの分布

Contributionの分布もみてみましょう。

total
none
0
1-
10-
100-
1000-
10000-

2018
299396
11752
245485
16842
16730
7351
1196
40

2017
200902
2247
169576
10701
11985
5516
851
26


98494
9505
75909
6141
4745
1835
345
14

約10万ユーザが増えたとはいえ、変動分のうち8.5万ユーザはContribution0か凍結ユーザのようです。

分布の比率でみるとこうなります。

total
none
0
1-
10-
100-
1000-
10000-

2018
100%
3.93%
81.99%
5.63%
5.59%
2.46%
0.40%
0.01%

2017
100%
1.12%
84.41%
5.33%
5.97%
2.75%
0.42%
0.01%


0%
2.81%
-2.41%
0.30%
-0.38%
-0.29%
-0.02%
0.00%

ここ1年で凍結ユーザの比率が上がったようですね。

コミュニティ規模の増大からすれば仕方のないことなのかもしれません。

この比率をgnuplotから円グラフで出そうかと思ったのですが、データの偏りがありすぎてあまりいい感じに表現できませんでした。

グラフ自体は以下の通りにしてほぼ書けたので残念です。


ユーザ記事数ランキング

記事数ランキングも出しておきましょう。

ランク
前年比
ユーザ名
記事数
前年比
Contribution数
Top記事

1
0
@7of9
5818
+783
4864
Qiita > 「いいね」機能についての要望

2
0
@tukiyo3
1603
+48
10097
たくさんあるオープンソースライセンスのそれぞれの特徴のまとめ

3

@kaizen_nagoya
1215

3168
プログラマが知っているとよい色使い(安全色)

4
+1
@ohisama@github
948
+440
548
ウィルスと闘ってみた。

5
-1
@suin
862
+165
27999
【まとめ】これ知らないプログラマって損してんなって思う汎用的なツール 100超

6
-3
@tbpgr
746
+18
8477
Markdown記法 サンプル集

7
+12
@YumaInaura
667
+409
2495
拝啓 本当は Qiita を書きたいのに、まだ迷っているあなたへ。

8

@ekzemplaro
501

573
ubuntu 18.04 に mecab をインストール

9
-3
@chen7897499
457
0
71
rails devise

10
-1
@edo_m18
390
+18
14127
WebのUIテスト自動化 - Seleniumを使ってみる

11
-4
@tcsh
387
+4
1333
[JAWS-UG CLI] ハンズオン一覧

12
-4
@snaka
385
+10
3450
rails console の tips

13
+3
@jkr_2255
369
+106
4086
セッション管理の要注意点

14
+3
@Nabetani
356
+93
1332
C++ の、スマートだと思う人がいるかもしれないコードの書き方12選のつもりが6個ぐらいで断念

15
-2
@cielavenir
341
+69
730
paiza 非公式難易度表

16
-2
@n0bisuke
327
+61
8060
3行のソースコードを入れるだけで機械学習できると噂のindicoをNode.jsで使って機械学習入門 してみる

17

@setouchi
325

1701
UbuntuでMacレベルに使いやすくておしゃれな環境構築

18

@shinyama
312

300
追い込まれないと動かない自分を、いつでも動かせるようになった画期的な方法

19

@zaburo
309

6775
gitでシンプルなデプロイ環境を作る

20
-10
@hshimo
307
0
11078
プログラマが独立・起業する時によくするミスと対策 まとめ

今年も @7of9 さんがトップ、記事数+783と今年も猛烈に記事数を増やしたようです。

しかし、 @kaizen_nagoya さんが新顔にも関わらず記事数1215で3位にランクイン。

おそるおそる見てみると、確かに2017年の暮れから活動が活発化し、大半である 1209記事 を2018年に書かれていました。

誰も届かないと思われた @7of9 さんの牙城ですが果たして...。


ユーザフォロワー数ランキング

次はフォロワー数ランキング。

ランク
前年比
ユーザ名
フォロワー数
前年比
Contribution数
Top記事

1
0
@hirokidaichi
3106
+958
40739
ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習

2
0
@jnchito
2943
+970
42002
モデルやメソッドに名前を付けるときは英語の品詞に気をつけよう

3
+2
@mizchi
2242
+465
21312
なぜ仮想DOMという概念が俺達の魂を震えさせるのか

4
+4
@icoxfog417
1930
+496
32733
Pythonを書き始める前に見るべきTips

5
-1
@dankogai
1916
+88
3194
Swiftで面倒なJSONの取り扱いをさらに10倍便利にするclass JSON

6
-3
@taguchi
1876
-9
9
ドットインストールで『PICO-8入門』を作ったときの学習ログ

7
-1
@yukihiro_matz
1764
+160
115
24時間一人mrubyハッカソン

8
+1
@mpyw
1717
+355
20245
PHPでデータベースに接続するときのまとめ

9
-2
@supermomonga
1709
+115
832
PHPとしても実行できるRubyの書きかた

10

@kaizen_nagoya
1672

3168
プログラマが知っているとよい色使い(安全色)

11
-1
@shu223
1600
+278
21669
ディープラーニングの有名ライブラリ5種を最短距離で試す半日コース(TensorFlow, Chainer, Caffe, DeepDream, 画風変換)

12
-1
@kenmatsu4
1465
+332
12050
【機械学習】ディープラーニング フレームワークChainerを試しながら解説してみる。

13

@suin
1356

27999
【まとめ】これ知らないプログラマって損してんなって思う汎用的なツール 100超

14
-1
@mattn
1322
+213
3173
本物の golang を... 本物の Gopher を、お見せしますよ。

15

@poly_soft
1191

10376
2018年の最先端バックエンドエンジニアに必要なスキルについて考えてみました。

16
-4
@hyuki
1172
+63
168
Vimで、文字列を別のところに「持って行って置換する」効率的な方法は?

17
-1
@joker1007
1160
+147
10159
てめえらのRailsはオブジェクト指向じゃねえ!まずはCallbackクラス、Validatorクラスを 活用しろ!

18
-4
@naoya@github
1149
+59
3175
React Native ファーストインプレッション

19
+1
@Qiita
1136
+207
9357
Markdown記法 チートシート

20

@kazukichi
1113

9713
エンジニアで稼ぐために大切な20のコト

@taguchi さんがフォロワーを減らしているようです。

このクラスにいながらフォロワーが減少するというのはちょっと興味深いですね。

また、こちらでも @kaizen_nagoya さんが10位にランクイン。


記事分析


総記事数

まずは総記事数をみてみます。昨年は26万強の記事がありましたが、今年はどうでしょう。

$ cat qiita_user_data.csv | awk -F"," 'BEGIN{SUM=0}{SUM+=$2}END{print SUM}'

364605

昨年はユーザあたり1.29でしたが、今年は 1.22 となりました。微減、でしょうか。

none
0
1-
10-
100-
1000-

2018
11752
244514
33911
8966
250
3

2017
2247
168427
23553
6496
177
2


9505
76087
10358
2470
73
1

記事数1以上のアクティブユーザについて、平均記事数は昨年8.6155に対し、今年は 8.4536 となりました。


記事いいねランキング

Qiita全体の記事についていいねでランキングをとってみます。

ランク
前年比
いいね数
前年比
記事

1
0
7528
+1422
ロシアの天才ハッカーによる【新人エンジニアサバイバルガイド】

2
0
7277
+1340
Markdown記法 チートシート

3
+1
6410
+1369
ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習

4
-1
5940
+303
非デザイナーエンジニアが一人でWebサービスを作るときに便利なツール32選

5
0
5319
+612
うまくメソッド名を付けるための参考情報

6
0
5136
+594
Gitでやらかした時に使える19個の奥義

7
+1
4811
+483
【まとめ】これ知らないプログラマって損してんなって思う汎用的なツール 100超

8
-1
4806
+292
数学を避けてきた社会人プログラマが機械学習の勉強を始める際の最短経路

9
+13
4591
+1763
プログラミングでよく使う英単語のまとめ【随時更新】

10
0
4445
+372
もう保守されない画面遷移図は嫌なので、UI Flow図を簡単にマークダウンぽく書くエディタ作った

11
0
4341
+653
新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡

12
0
4226
+658
インフラエンジニアとしてよく使うコマンド集

13
0
3969
+478
初心者向け、「上手い」シェルスクリプトの書き方メモ

14
+5
3732
+746
翻訳: WebAPI 設計のベストプラクティス

15

3671

イマドキのJavaScriptの書き方2018

16
+13
3593
+1008
エンジニアなら知っておきたい、絵で見てわかるセキュア通信の基本

17
-3
3589
+221
ネイティブと働いて分かった英語コミットメッセージの頻出動詞10つ

18
0
3538
+520
何かのときにすっと出したい、プログラミングに関する法則・原則一覧

19
+8
3488
+792
オブジェクト指向と10年戦ってわかったこと

20
+1
3406
+515
Pythonを書き始める前に見るべきTips

21
-4
3336
+282
そこそこセキュアなlinuxサーバーを作る

22
+2
3335
+587
Reactを使うとなぜjQueryが要らなくなるのか

23
-7
3241
+143
コードを書く際の指針として見返すサイトまとめ

24
+17
3234
+950
エンジニアで稼ぐために大切な20のコト

25
+3
3224
+555
Gitのコミットメッセージの書き方

26
-3
3194
+413
インフラエンジニアじゃなくても押さえておきたいSSHの基礎知識

27
-12
3176
+35
特にプログラマーでもデータサイエンティストで ないけど、Tensorflowを1ヶ月触ったので超分かりやすく解 説

28
-2
3123
+419
Vim幼稚園からVim小学校へ

29
-9
3097
+146
2016年 独りで新規WEBサービスを開発・運用した際の知見

30
+29
3050
+1057
「AWS is 何」を3行でまとめてみるよ

31
+5
3003
+578
GitHubで使われている実用英語コメント集

32
+13
2960
+713
質問は恥ではないし役に立つ

33
-8
2884
+180
モデルやメソッドに名前を付けるときは英語の品詞に気をつけよう

34
+20
2850
+782
AWSアカウントを取得したら速攻でやっておくべき初期設定まとめ

35
-1
2737
+245
画像処理の数式を見て石になった時のための、金の針

36
-6
2713
+132
誰も教えてくれなかったMySQLの障害解析方法

37

2711

エンジニアの情報収集法まとめ

38

2706

開設後3週間で収益10万円を得た個人開発サイトでやったことの全部を公開する

39
0
2701
+362
[初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか

40
-9
2671
+93
プログラマが独立・起業する時によくするミスと対策 まとめ

41
-9
2656
+85
英語コミットコメントに使えるオシャレフレーズ集

42
-9
2649
+95
Linux開発環境の基礎知識

43
+19
2645
+676
JavaScriptを読んでて「なにこれ!?」と思うけれど調べられない記法8選。

44
-7
2627
+216
不安とストレスから解放される見積りとスケジュール方法

45

2620

一番分かりやすい OAuth の説明

46
-8
2619
+238
中上級者になるためのJavaScript【知識編】

47
+1
2618
+460
VagrantとDockerについて名前しか知らなかったので試した

48
-6
2614
+332
脱初心者を目指すなら知っておきたい便利なVimコマンド25選 (Vimmerレベル診断付き)

49

2550

2018年の最先端バックエンドエンジニアに必要なスキルについて考えてみました。

50
+23
2528
+648
2017年のフロントエンドエンジニアならこの程度は知ってて当然だよな?

51
+13
2487
+519
Go言語の初心者が見ると幸せになれる場所 #golang

52

2465

[2018] 個人でも使える!おすすめAPI一覧

53
-18
2462
-4
最近の行儀のよい JavaScript の書き方

54
+2
2442
+387
ゼロからDeepまで学ぶ強化学習

55
+11
2422
+466
使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」

56
-12
2420
+159
30分で出来る、JavaScript (Electron) でデスクトップアプリを作って配布するまで

57
-7
2411
+294
npm とか bower とか一体何なんだよ!Javascript 界隈の文脈を理解しよう

58

2411

コーディングをするときに鼻血がでるほど便利なwebツールリスト(随時更新予定)

59
-12
2376
+198
WebAPIでエラーをどう表現すべき?15のサービスを調査してみた

60

2368

Chrome拡張の高速な英語辞書ツールをつくりました(Mouse Dictionary)

61
-1
2364
+375
究極のIT系最新技術情報収集用Slackチーム公開 - モヒカンSlack -

62
-22
2356
+67
日本の行政機関等が公開しているAPIについてのまとめ(2016年8月17日暫定版。随時更新)

63

2352

プログラミング勉強を加速させる7つの習慣

64
-21
2350
+72
httpsだからというだけで安全?調べたら怖くなってきたSSLの話!?

65
-2
2336
+368
もう逃げない。HTMLのviewportをちゃんと理解する

66
-20
2327
+148
You Don't Need jQuery

67
-12
2311
+256
PHPでデータベースに接続するときのまとめ

68
-19
2286
+158
クラスの命名のアンチパターン

69
-8
2225
+247
Electronでアプリケーションを作ってみよう

70
-13
2186
+149
データサイエンティストを目指す人のpython環境構築 2016

71
-19
2156
+58
あなたのサーバは本当に安全ですか?今もっともイケてる脆弱性検知ツールVulsを使ってみた

72

2141

エンジニアは全員技術記事を書くことを習慣化した方がいいぞ

73

2118

VSCodeのオススメ拡張機能 24選 (とTipsをいくつか)

74
+3
2113
+258
Android開発を受注したからKotlinをガッツリ使ってみたら最高だった

75

2106

新卒からの質問をソシャゲっぽい仕組みにしたら捗った話

76
+4
2095
+268
なぜ仮想DOMという概念が俺達の魂を震えさせるのか

77
-10
2092
+146
Markdownテキストでシーケンス図とフローチャートを描く

78
-9
2085
+146
Javaを使うなら知っておきたい技術、フレームワーク、ライブラリ、ツールまとめ

79

2071

なぜ我々はいまだに文字列でコメントを書いているのか

80
-2
2066
+225
そろそろ真面目に、HTMLで帳票を描く話をしようか

81
-23
2045
+13
最強のSSH踏み台設定

82
-14
2039
+98
Swiftで作られたイケてるUIライブラリたち

83
-9
2018
+147
Git・GitHubに隠された便利な機能 - GitHub Cheat Sheet(日本語訳)

84
-19
1995
+30
ライセンスの選択を恐れる必要はありません

85
-4
1987
+199
初心者エンジニアにおすすめしたい「進捗どうなった?」と言われないための仕事の進め方

86

1969

プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話

87

1964

もっと気軽にアウトプットできる技術ブログサービス「Qrunch(クランチ)」をリリースした【個人開発】

88

1958

【今日からできる】コミットメッセージに 「プレフィックス」 をつけるだけで、開発効率が上がった話

89
-14
1957
+87
プレゼンテーションに使う画像の探し方

90
-19
1939
+55
エンジニアとして成長するべく私が実践している学習方法

91
-21
1935
+3
ここ数年前から2015/5までのモダンフロントエンドを総まとめしてみた

92
-20
1933
+52
春からはじめるモダンJavaScript / ES2015

93

1913

iPhone/iPad/Apple Watch解像度(画面サイズ)早見表

94

1911

GitHub に AWS キーペアを上げると抜かれるってほんと???試してみよー!

95

1887

エンジニアが情報収集とトレンドを追うのに読むと良いサイト

96

1878

ブロックチェーンを作ることで学ぶ ~ブロックチェーンがどのように動いているのか学ぶ最速の方法は作ってみることだ~

97
-21
1868
+10
読んで良かった基礎知識の入門書

98

1858

動的言語だけやってた僕が、38日間Go言語を書いて学んだこと

99

1855

初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」

100

1849

文系エンジニアが機械学習に入門するために小学校の算数から高校数学までを一気に復習してみました。

1位は昨年と変わらず、サバイバルガイドですね。1位を維持しながらも、この1年で1400ほどのいいねを伸ばしています。

また、今年新たにTop100入りした記事は 23記事 ありました。

そんな今年の記事で最も当たった(?)のが イマドキのJavaScriptの書き方2018 でしょうか。

ちなみに例によってこのランキングには欠陥があります。

ランクイン数
ユーザ名

5
@jnchito

5
@hirokidaichi

3
@suin

3
@icoxfog417

2
@poly_soft

2
@muran001

2
@mizchi

というように、 @jnchito さんと @hirokidaichi さんが5記事入っていますが、記事データはユーザトップに出てくる5記事しか取っていないので、6記事目以降がランクインするかどうかは判定していません。

というわけでこのあたりを恥ずかしながら人力でフォローすると、

ランク
前年比
いいね数
前年比
記事

51

2519

新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則

53

2482

新人プログラマに正月休み中を使って読んでみてほしい技術書をセレクトしてみた。

100

1867

新入社員が来てメンターになれって言われたけど、どうすればいいのかという対話テクニック

下位3位が退き、上の3つがTop100に入ります。

ちなみに追い出された3つは奇しくも全てTop100に複数入りしている @jnchito / @suin / @poly_soft さんの記事でしたので、複数ランクインの状況について

ランクイン数
ユーザ名

8
@hirokidaichi

4
@jnchito

3
@icoxfog417

2
@suin

2
@muran001

2
@mizchi

1
@poly_soft

という感じになります。


Organization分析

さて、それでは最後に今年の目玉(?)である Organization分析 に入りたいと思います。


全体

ユーザ分析では全体のユーザ数もみてましたので、こちらではOrganization数をみておきましょう。

$ wc -l qiita_organization_data.csv

648 qiita_organization_data.csv

昨年データがないのでなんとも言えませんが、とりあえず現時点で およそ650 Organization あるようです。


Organization別いいねランキング

それではユーザ同様に、Organization別のいいねランキングをみてみましょう。上位から30位を出してみます。

ちなみにユーザだと記事のいいねに加え、編集リクエストによる貢献もあるため総合してContributionがカウントされますが、Organizationだと所属メンバによる記事のいいねだけがカウントされているようです。

ランク
Organization名
総いいね
記事数
平均いいね
Top数
Top占有率
Top記事

1
@mercari
90816
1461
62.1602
5318
5.8558%
うまくメソッド名を付けるため の参考情報

2
@tis
59841
876
68.3116
3406
5.69175%
Pythonを書き始める前に見るべきTips

3
@increments
53907
834
64.6367
7274
13.4936%
Markdown記法 チートシート

4
@sonicgarden
48142
433
111.182
2884
5.99061%
モデルやメソッドに名 前を付けるときは英語の品詞に気をつけよう

5
@wantedly
44438
508
87.4764
2039
4.58842%
Swiftで作られたイケてるUIライブラリたち

6
@cyberagent
41159
951
43.2797
1745
4.23966%
JavaScriptの「this」は 「4種類」??

7
@rector
40733
38
1071.92
6410
15.7366%
ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習

8
@yyphp
37735
1337
28.2236
4809
12.7441%
【まとめ】これ知らないプログラマって損してんなって思う汎用的なツール 100超

9
@yumemi
33207
1334
24.8928
1003
3.02045%
スタートアップはお金を払ってでも使うべきプロダクト14選

10
@future
31686
647
48.9737
3669
11.5792%
イマドキのJavaScriptの書き方2018

11
@shouldbee
29558
1026
28.809
4809
16.2697%
【まとめ】これ知らないプログラマって損してんなって思う汎用的なツール 100超

12
@dwango
25060
789
31.7617
1555
6.20511%
高校生にWeb上でプログラミング を教え始めたエンジニアがこの8ヶ月間で得た気づき

13
@dena_coltd
24567
952
25.8057
2709
11.027%
エンジニアの情報収集法 まとめ

14
@pixiv
22405
613
36.5498
1995
8.90426%
ライセンスの選択を恐れる必要はありません

15
@m3dev
21040
832
25.2885
1345
6.39259%
インストールするだけでVSCodeをカッコよくする拡張4つ

16
@iotlt
20455
1416
14.4456
723
3.53459%
3行のソースコードを入れるだけで 機械学習できると噂のindicoをNode.jsで使って機械学習入門してみる

17
@yahoo-japan-corp
20110
874
23.0092
1117
5.55445%
iOSアプリ 個人開発で使ってるツールとかノウハウを公開してみる

18
@freee
20013
588
34.0357
713
3.56268%
GitHubを使って3分でHPを公開する。

19
@qoncept
19873
145
137.055
2113
10.6325%
Android開発を受注したからKotlinをガッツリ使ってみたら最高だった

20
@synapse
19504
300
65.0133
2311
11.8489%
PHPでデータベースに接続する ときのまとめ

21
@atrae
19241
330
58.3061
5940
30.8716%
非デザイナーエンジニアが一人でWebサービスを作るときに便利なツール32選

22
@lifull
19190
788
24.3528
1612
8.40021%
ターミナルの作業が捗るかもな小技5つ

23
@sakura_internet
18487
425
43.4988
1319
7.13474%
Docker 入門 ハンズオン資料

24
@jrits
18468
993
18.5982
1542
8.34958%
全国のSeleniumer必読

25
@crowdworks
17841
439
40.6401
2850
15.9744%
AWSアカウントを取得し たら速攻でやっておくべき初期設定まとめ

26
@iwate-pu
16711
714
23.4048
1069
6.39698%
homebrewとは何者か。仕組みについて調べてみた

27
@nri
16500
196
84.1837
1659
10.0545%
「赤の他人」の対義語は「白い恋人」 これを自動生成したい物語

28
@mixi
16033
519
30.8921
1573
9.81101%
tigでgitをもっと便利に! addやcommitも

29
@aktsk
15473
261
59.2835
1867
12.0662%
読んで良かった基礎知識の入門書

30
@globis
15248
430
35.4605
1496
9.81112%
日本人が間違いやすいコーディング上の英語

1位は @mercari さんでした!おめでとうございます!

2位の @tis さんに 1.5倍 ほどの差をつけ、現時点で圧倒的トップです。

また、Organization上位と言えども、大多数のいいねが特定のユーザに依っていることがよく見られる中、メルカリのすごいところは Top5の記事が全て異なるユーザ で構成されています。

層の厚さというか、Qiitaを通じたアウトプットの活発さが感じられます。

ちなみに弊社は40位でした。精進します。


Organization記事数ランキング

ここからおまけです。10位まで。

ランク
Organization名
記事数
総いいね
平均記事いいね

1
@mercari
1461
90816
62.1602

2
@iotlt
1416
20455
14.4456

3
@yyphp
1337
37735
28.2236

4
@yumemi
1334
33207
24.8928

5
@shouldbee
1026
29558
28.809

6
@jrits
993
18468
18.5982

7
@dena_coltd
952
24567
25.8057

8
@cyberagent
951
41159
43.2797

9
@tis
876
59841
68.3116

10
@yahoo-japan-corp
874
20110
23.0092

@mercari さん2冠!


Organizationメンバ数ランキング

では メンバの数 ではどうでしょう。

ランク
Organization名
メンバ数
総いいね
1人あたりいいね

1
@iotlt
102
20455
200.539

2
@yumemi
79
33207
420.342

3
@lifull
75
19190
255.867

4
@mohikanz
69
11750
170.29

5
@yahoo-japan-corp
68
20110
295.735

6
@cyberagent
66
41159
623.621

7
@dwango
66
25060
379.697

8
@future
62
31686
511.065

9
@oracle
61
2265
37.1311

10
@mercari
59
90816
1539.25

こちらはIoT勉強会の @iotlt がトップでした。 コミュニティ 、って感じがしますね。

100人を超えるOrganization がこれ以外にないというのが非常にびっくりしました。

富士通 さんあたりがもっといるもんだと思っていましたが、意外とないもんですね。

気になったのでメンバ数の分布を調べたところ、以下のような感じでした。

total
0-
10-
20-
30-
40-
50-
60-
70-
100-

648
412
136
54
16
14
7
6
2
1

100.00%
63.58%
20.99%
8.33%
2.47%
2.16%
1.08%
0.93%
0.31%
0.15%

gnuplotさんの力でグラフ化するとこんな感じ。


Organization1人あたりいいね数ランキング

最後に 1人あたりいいね のランキングをみてみましょう。

ランク
Organization名
1人あたりいいね
メンバ数
総いいね

1
@rector
13577.7
3
40733

2
@shouldbee
9852.67
3
29558

3
@synapse
6501.33
3
19504

4
@consensus-base
5538
2
11076

5
@qoncept
3974.6
5
19873

6
@ics
3271.5
4
13086

7
@sonicgarden
2831.88
17
48142

8
@wantedly
2777.38
16
44438

9
@yyphp
2695.36
14
37735

10
@increments
2567
21
53907

@rector さんの数値がえらいことになっていますが、これは @hirokidaichi さんを擁する一方、メンバが3人しかいないことに起因します。

少数組織はこういう感じになりがちなので、「 メンバ数20名以上 」のOrganizationに絞ってみるとこんな感じです。

ランク
Organization名
1人あたりいいね
メンバ数
総いいね

1
@increments
2567
21
53907

2
@mercari
1539.25
59
90816

3
@tis
1014.25
59
59841

4
@sakura_internet
880.333
21
18487

5
@cyberagent
623.621
66
41159

6
@nri
611.111
27
16500

7
@iwate-pu
596.821
28
16711

8
@m3dev
584.444
36
21040

9
@litalico
548.476
21
11518

10
@pixiv
533.452
42
22405


本年のシェル芸

基本的に昨年と同じデータフォーマットで同じ分析をしているだけなので、シェル芸として真新しいものは特にありません。

とはいえ同じようにやるのも芸がないので、昨年のシェル芸を眺めながら以下の点で少しだけ改良(?)を加えたりしてみました。


ループの回し方

昨年はリストに対するループ操作をfor文でやっていました。

$ cat items.list

apple
banana
orange

$ for ITEM in $(cat items.list) ; do echo ${ITEM} ; done
apple
banana
orange

というような具合です。

機能的になんの問題もないのですが、個人的に「 ループ対象リストがあり、ループ対象を取り出して、処理する 」という思考の流れに対して、コードの記載順が「 ループ対象を、ループ対象リストから取り出して、処理する 」というようになっていたので少し違和感がありました。

左から右にコードを書く 割に、「リストから取り出す」部分で少し逆戻りして理解するようなところです。

というわけなので、ひたすら左から右に流れるよう、以下のようにwhile文で書きました。

$ cat items.list | while read ITEM ; do echo ${ITEM} ; done

apple
banana
orange

これなら思考の流れの通りにコードが記載でき、個人的に違和感がなくなりました。

ちなみに、速度ですが

$ time seq 100000 | while read LINE ; do echo ${LINE} ; done > while.out

real 0m2.948s
user 0m2.088s
sys 0m0.858s

$ time for LINE in $(seq 100000) ; do echo ${LINE} ; done > for.out

real 0m1.896s
user 0m1.568s
sys 0m0.325s

forのほうが速いようです。なんか意外。

strace で見てみるとずいぶんと様相が違うようです。

strace

# strace -c ./for.sh

% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
94.85 0.280198 3 100000 write
4.70 0.013896 3 4610 read
0.12 0.000356 4 91 mremap
0.08 0.000250 17 15 6 openat
0.06 0.000163 54 3 dup2
0.04 0.000118 118 1 clone
0.03 0.000094 31 3 munmap
0.02 0.000060 1 78 brk
0.01 0.000038 3 13 mmap
0.01 0.000036 2 17 rt_sigaction
0.01 0.000035 4 8 mprotect
0.01 0.000028 2 12 rt_sigprocmask
0.01 0.000023 2 12 close
0.01 0.000020 3 6 stat
0.01 0.000015 2 8 1 fcntl
0.00 0.000010 1 8 fstat
0.00 0.000009 5 2 1 wait4
0.00 0.000007 2 3 2 ioctl
0.00 0.000007 7 1 pipe
0.00 0.000006 2 3 lseek
0.00 0.000005 3 2 prlimit64
0.00 0.000004 1 5 5 access
0.00 0.000004 2 2 getpid
0.00 0.000004 4 1 sysinfo
0.00 0.000003 3 1 rt_sigreturn
0.00 0.000002 2 1 uname
0.00 0.000002 2 1 geteuid
0.00 0.000002 2 1 getegid
0.00 0.000002 2 1 getppid
0.00 0.000002 2 1 getpgrp
0.00 0.000002 2 1 arch_prctl
0.00 0.000001 1 1 getuid
0.00 0.000001 1 1 getgid
0.00 0.000000 0 1 execve
------ ----------- ----------- --------- --------- ----------------
100.00 0.295403 104914 15 total

# strace -c ./while.sh
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.262751 87584 3 1 wait4
0.00 0.000000 0 8 read
0.00 0.000000 0 12 2 close
0.00 0.000000 0 6 stat
0.00 0.000000 0 7 fstat
0.00 0.000000 0 3 lseek
0.00 0.000000 0 11 mmap
0.00 0.000000 0 8 mprotect
0.00 0.000000 0 1 munmap
0.00 0.000000 0 3 brk
0.00 0.000000 0 16 rt_sigaction
0.00 0.000000 0 15 rt_sigprocmask
0.00 0.000000 0 1 rt_sigreturn
0.00 0.000000 0 3 2 ioctl
0.00 0.000000 0 5 5 access
0.00 0.000000 0 1 pipe
0.00 0.000000 0 1 dup2
0.00 0.000000 0 2 getpid
0.00 0.000000 0 2 clone
0.00 0.000000 0 1 execve
0.00 0.000000 0 1 uname
0.00 0.000000 0 3 1 fcntl
0.00 0.000000 0 1 sysinfo
0.00 0.000000 0 1 getuid
0.00 0.000000 0 1 getgid
0.00 0.000000 0 1 geteuid
0.00 0.000000 0 1 getegid
0.00 0.000000 0 1 getppid
0.00 0.000000 0 1 getpgrp
0.00 0.000000 0 1 arch_prctl
0.00 0.000000 0 14 6 openat
0.00 0.000000 0 2 prlimit64
------ ----------- ----------- --------- --------- ----------------
100.00 0.262751 137 17 total


この結果を見て「なぜ遅いのか」を説明できるようになることを2019年の目標にしてみます。


処理用変数を減らす

これは主に昨年順位との比較を行ったときのものですが、今年順位リストに昨年順位リストを併記するような操作で、処理用変数を使っていました。

# 2017年の順位ファイル

$ cat rank2017.list
1 apple
2 banana
3 orange

# 2018年の順位ファイル
$ cat rank2018.list
1 banana
2 orange
3 grape

# 2018年の順位に2017年の順位(LAST)をアペンド
$ cat rank2018.list | while read LINE ; do LAST=$(grep $(echo ${LINE} | cut -d " " -f 2) rank2017.list | cut -d " " -f 1) ; echo ${LINE} ${LAST} ; done
1 banana 2
2 orange 3
3 grape

というように、昨年順位を一旦 LAST 変数に格納し、もとの LINE にアペンドして出力するような感じです。

が、やはりシェル芸的にはちゃんと1行で流れるように書きたいと思っていました。

そこで、以下のように変更しています。

$ cat rank2018.list | while read LINE ; do grep $(echo ${LINE} | cut -d " " -f 2) rank2017.list | cut -d " " -f 1 | echo ${LINE} $(cat) ; done

1 banana 2
2 orange 3
3 grape

こちらでは LAST で一旦昨年順位を保管していたところ、ひたすらパイプに流して最終的に $(cat) で受け取っています。

このことを簡単にやると、

$ LINE="World!"

$ echo "Hello ${LINE}"
Hello World!

$ echo "World!" | echo "Hello $(cat)"
Hello World!

というような感じです。

このことを知らない場合はパイプ前の内容を一旦変数に格納することになりますが、実はパイプで繋いで cat すると、catはパイプで流れてきた内容を標準出力してくれます。

これもひたすら左から右に流れるようなコードになり、個人的には満足しています。


おわりに

今年も長々とやってしまいました。

毎年やっているので特に何も考えなくても凶悪なワンライナーでランキングを出せるようになってきましたが、やはりシェルに通すまでのデータ準備が大変ですね。

昨年の20万ユーザに対し、今年は30万ユーザでしたので、単純に収集時間だけでもバカになりませんし、収集し始めてから「あっ!」なんてことで1からやり直し、みたいなこともどんどん辛くなりそうです。

来年はドモホルンリンクル方式でゆっくり、ながーく収集したほうがいいんですかね。

(とはいえ、最初と最後で時間が開いてしまうとランキングとして不正確というか不誠実というか...)

ただ、こうやって毎年眺めているとQiitaで1年いろんなことがあったなぁということと、プラットフォームとして成長していっているのが素直に見えるので、 分析やって楽しい というのが率直な感想です。

それではまた来年。良いお年を~。