Pythonに関する技術ブログを書いていて、気付いたら2年経っていました。節目となるので、2年間の運営数字(PVや記事数、収益も)を公開すると共に、技術ブログのメリットとデメリットを紹介したいと思います。
こんにちは。wat(@watlablog)です。まだ続いています!皆さん気になるブログ運営のあれこれを紹介します!
この記事の目的
節目を記録して心機一転するため
WATLABブログの最初の記事を2019年4月6日に投稿し、この記事を公開する現在までで丸2年が経ちました!
1年が経った時に「Pythonブログを1年続けた結果の運営数字!気になるPVは?」という記事を書きました。この記事は主にPVについてまとめてみました。
ブログ開始から1年までは本当に劇的で、アクセス0から数万PVまでの変化を記録する事が出来ました。
今回は2年間の数値変化を記録し、その時考えていた事をまとめておく事で、これからの活動の糧とします。
考えていた事をつらつらと書くと、自分語りが多くなります。運営数字のみをみたい方は目次から記事の後半まで飛んでみて下さい!
節目を記録し、心機一転次の記事を書いていく…という意味で本記事を書きます。
技術ブログがどんなものかを伝えるため
本記事の目的は2つあります。
1つ目は上記の通り自分のためですが、もう1つはまだ技術ブログを書いた事の無い方に向けた内容です。
技術系の職種に就いている方は多くの方が企業で働いている会社員だと思います。
技術系の会社員が技術ブログを書く事には様々なメリットがあると思っています。この記事では、これから技術ブログを書こうと思っている人のために、1つの例として当ブログの状況をお知らせします。
正直、特に思いっきり成功しているブログというわけではありませんが、1つの事例として参考にして下さい。
技術ブログのメリット5選
ここでは数字を紹介する前に、技術ブログを書くメリットを少し紹介します。ただ単にブログで稼ぐとか、アウトプットした方が勉強の効果が上がるとか以上に技術ブログは様々な魅力があります。
本業のスキルアップになる
1つ目は本業のスキルアップになるという事です。
これは言わずもがなでしょうが、技術者が学習する時は、当然本業に関係する内容が多く含まれます。技術ブログとしてアウトプットをしながら学習していくと、記事化する事で不足部分を調べたり、わかったと思っていて実はわかっていない部分が判明したりと確認をしながら学習をする事が可能です。
この過程を踏む事で本業における「人への説明スキル」が向上したり、自分の技術への自信に繋がったりといった事が本業への良い影響となると思います。
会社特化では無い標準的な知識がつく
会社の中だけで勉強している場合、懸念が1つ考えられます。
それは「その知識、会社が無くなっても使える?」という問いに対して、回答に窮する場合があるという事です。
急に会社が倒産したり、急に部署異動したり、今の職場を離れる事になったとした場合、自分のやってきた事はどの程度他でも役立つか、と僕はふと思った事があります。
例えば製造業の開発職の場合、実験や解析の方法、組織の仕事の進め方(色々な帳票類の書き方、管理方法や業務フロー等)といったスキルがあると思います。
おそらく同じ製品を扱う同業種であれば即戦力となるでしょうが、扱う製品が変わったり、そもそも業界が変わったりすると基本的には学び直しになると思います。
さらに、実は自分のこれまで教わっていた内容はその会社に特化していて、業界標準ではなかった…といった場合はいっそう苦労すると思います。
その時に「工学」や「数値計算」、「プログラミング」…といった技術カテゴリ軸の知識(標準的な知識)が豊富であれば、学び直してもすぐに戦力となれるはずです。
また、学生の時優秀でも、世の中の技術は思っているより速く新陳代謝していますので、学習しない=退化と同じだと思いました。
ただ、会社でアウトプットを出さずにずっと技術書を読んでいると給料泥棒と言われかねませんので、おそらく技術者は自分で時間を作って学習することが必須なのかなと考えます。
スポーツ選手は試合だけでなく私生活の食事にも気を使っています。別に技術者に限った話でもないかも知れません。
そして、ブログに会社特化の知識を書くとコンプライアンス違反となり訴えられるため、必然的に標準知識を学ぶ事になり、それは仮にその会社ではなくても活用可能な知識を学んでいる事に他ならないと言えます。
技術ブログをやると強くなる…といっても良いのでは(目指せつよつよ)??
ちなみに僕はブログとTwitterを始めて、自分が本当によわよわだという事を認識できました…(良い意味でバケモノ多すぎ)。
会社の中だけで習得する技術に満足していると、数年後には後悔すると感じました。
このように、僕は最初ネガティブなモチベーションで技術ブログを始めたかも知れませんが、単純に標準的な知識を得るのは楽しいです。知的好奇心を満たすというポジティブな理由でも技術ブログをやる理由としては十分だと思います。
知識のデータベースができる
技術ブログをやっていると知識のデータベースが出来ます。
これはブログという性質上、当たり前の事ですね。そのまま、学習のログをとっているという事になります。
当ブログはこの2年間で200を超える記事を書いていますが、僕はその全てを覚えていません!
むりです!
しかし、やったという事はかろうじて覚えています。そのため当ブログの検索欄にキーワードを入力して出てきた記事を読めば、再び頭の中に記事作成時に理解した内容が復活します。
別に試験のために勉強しているのではないので、これで十分だと思っています。一度ログをとっておけば、自宅でも会社でも、お買い物中でも、インターネットに繋がる場所であればどこでも知識を引き出す事が可能ですので、技術ブログは最強のデータベースと言えます。
学習が継続する
技術ブログをやっていると、学習が継続しやすいです。
(これはほぼ生存者バイアスかも知れませんが)SNSでみているとそういう人が多いです。QiitaやGitHub、NoteやYoutube、RadioTalkをやっている人も同様。
僕の場合は、上に書いたように標準的な知識を得るのが楽しいのと、下に書く「ちょっと稼げる」という所にも助けられ、学習が継続しています。
継続は力なりという言葉は今では疑う人がいないほど浸透していますが、試行錯誤を伴って学習を続けていれば力は当然付いてきます。
一説によれば1つの内容について1万時間学習するとその道のプロになるそうです。
是非一刻も早く技術ブログを始めてプロへの道を歩みましょう!
楽しいしちょっと稼げる
ちょこちょこ触れていますが、技術ブログは楽しいです。
「家でも勉強しているの?きもい!」と言われてもめげないくらい新しい知識を得たり、SNSで共有したりという事は楽しいです。
世間には似たように学習内容を発信する人は多いとわかりましたし、その方達と交流すると自分はまだまだだと思いますが、別に競争ではないので楽しくできればそれで良いと思っています。
また、この記事の後半で数字を出していますが、ちょっと稼げます。
ちょっとと書いたのは、僕の場合はまだ雀の涙程度だからですが、サーバー代やドメイン代くらいは賄っています。
将来もっといくかも…という淡い期待を常に持っていられるのは精神的にかなり楽になります。
学習してスキルアップしつつ、もしかしたら稼ぎになる…という現代の働き方改革とも言うべき技術ブログを始めない理由はなんでしょう?
(確定申告に注意。)
あまりオススメしすぎるとマルチへの勧誘みたいになってしまいますが、そのくらい推しているという事で…。
技術ブログのデメリット
学習に時間がかかる
メリットばかりお伝えしていましたが、技術ブログには学習に時間がかかるという最大のデメリットが1つあります。
通常、技術書を読んで理解したらどんどん次、次、と学習を展開可能です。プログラミングでも、コードが動いて期待の結果を得たら、さっさと次の開発に進めます。
しかし、技術ブロガーは逐一まとめます。中々先に進みません。
1記事書くのに何時間かかるでしょうか?例えばこの前書いたPyTorchの線形回帰の記事は、4時間以上はかかっています。
線形回帰なんて、別にそんなに難しくありません。
自分用であればコードを記録して余計な説明は一切なしでも良いのですが、記事として成り立たせるためには、文章のストーリーを考えたり、前提条件を書いておいたり、コードの詳細説明を書いたり、他の記事やソースへのリンクを貼ったり…とやる事が沢山あります。
まとめる事に時間がかかるので、最速で技術レベルを上げたい…と考えている方には技術ブログはオススメできません。
ただ、上記メリットがあり記事を資産化できる事から、僕自身はこれからも技術ブログを続けたいと思っています。
これから技術ブログを始める方は僕と同じようにエックスサーバーをレンタルして、WordPressで記事を書き始める事をオススメします!
2年間の運営数字変化
ここからは数字の話をしていきます。既に技術ブログを始めている方は比較する事で見えてくる物もあるかも知れません。
記事数
下のグラフは横軸が経過月、縦軸が総記事数です。横軸の1=2019年の4月、24が2021年の3月です。
2年間で204記事を執筆しました。100記事までは半年で行ったのですが、そこから200記事までは結局2年かかりました。
ブログ開始1年後から本業の方の忙しさが増したという言い訳と、最初は簡単な内容の記事ばかりでしたが、だんだんと内容のマニアックさとボリュームが上がってきたという言い訳をしておきます!
コンスタントに毎日記事を書いている人は本当にすごいと思いますが、僕より圧倒的に少ない記事数で数万PVを出していらっしゃる方もいますので、どうやらGoogleに好まれるのは数より質の方のようです。
PV
続いて月間PVです。こちらは最終的に月間6万PVを記録しました。
とは言え、最近の平均は5万PVくらいです。以前書いた「【G検定チートシート】AI関連法律や動向含む試験当日のカンペ」という記事がG検定の度にバズりますので、その時だけ数千PVは増えます(まさにチート)。
おそらくこのような定期的にバズる記事を量産する事ができれば、アクセスはどんどん増えていくのでしょう。
ただ、僕は学習のためのブログなので今後も意図的にバズる方向には書かない予定です。たぶん。
ユーザ数
PVは同一ユーザが他のページを閲覧したらその分カウントされますが、ユーザ数はこのブログを訪問して下さった方の数です。
当ブログは月間で約3万人の方に見て頂いているようです。これは素直に嬉しい数字です!ありがとうございます!
Google表示回数
Google表示回数とは、Google検索で皆様が検索した時にブラウザに表示された回数を意味します。最終的に月間35万回も表示されていました!
表示された時に100%僕のブログにアクセスしてくれると、月間35万PVになるのかな…。魅力的な記事タイトルが求められますね。
平均記事ランキング
平均記事ランキングは、当ブログの記事全体がGoogleの何番目に表示されるかを平均化した数値です。当ブログの場合はおよそ10位〜13位くらいをうろうろしているようです。
10位を切ってくればGoogle検索の1ページ目に表示されるので、PVは倍増しそうです。古い稚拙な記事はもしかしたら需要はあってもタイトルが微妙なのかも知れません。
収益
最後は収益です。僕は記事に関連した書籍やサービスの紹介(アフィリエイト)とGoogle AdSenseを主に使っています。
当ブログは稼ぐために特化したようなブログではないので、この数値は微妙。月間で最高1万円弱というのが実力です。サーバー代が月1000円程度、ドメイン代が年1000円程度と考えれば、黒字にはなっています。
ちなみに23ヶ月目(2021年2月)からAdSense収益が落ちているのは、自動広告を外したからです。自動広告は制御が面倒で、勝手にコード欄のど真ん中に広告を入れられてしまったり、せっかく来て頂いている方に不快な思いをさせてしまうため止めました。
もっと稼げればE資格の受講料(10〜20万円!)や書籍を買いあさって関連記事を増やしたり質を高めたりができるかも知れませんが…それよりも記事の読みやすさを優先しました。
まとめ
以上、前半はやや冗長に語ってしまいましたが、技術ブログのメリットとデメリットを紹介し、実際の運営数字として記事数、PV数、ユーザ数、Google表示回数、平均記事ランキング、収益を公開してみました。
結論は「技術ブログは楽しい!」という事ですが、このように節目で過去を振り返る事は整理にもなって良かったです。
是非今後とも当WATLABブログをよろしくお願い致します。
2年継続した記録を残しておきました!今後も記事は書いていくのでよろしくお願いします!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!
おまけ:集計に使ったPythonコード
以下のコードは今回集計に使ったPythonコードです。下に添付しているブランクのcsvファイルに値を入力して実行すれば、同じようなグラフを描く事ができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
import pandas as pd import numpy as np from matplotlib import pyplot as plt data = pd.read_csv('blog_report.csv', encoding='SHIFT-JIS') MONTH = data['経過月'] PV = data['PV数[PV]'] USER = data['ユーザー[人]'] IMP = data['合計表示回数'] ARTICLE = data['総記事数'] RANK = data['平均掲載順位'] ADSENSE = data['AdSense収益[円]'] MOSHIMO = data['もしも収益[円]'] PROFIT = data['AdSense収益[円]'] + data['もしも収益[円]'] print(MONTH.tail(1)) # ここからグラフ描画 # フォントの種類とサイズを設定する。 plt.rcParams['font.size'] = 14 plt.rcParams['font.family'] = 'Times New Roman' # 目盛を内側にする。 plt.rcParams['xtick.direction'] = 'in' plt.rcParams['ytick.direction'] = 'in' # グラフの上下左右に目盛線を付ける。 fig = plt.figure(figsize=(8,3)) ax1 = fig.add_subplot(111) ax1.yaxis.set_ticks_position('both') ax1.xaxis.set_ticks_position('both') # 軸のラベルを設定する。 ax1.set_xlabel('Elapsed Months') #ax1.set_ylabel('PV') #ax1.set_ylabel('User') #ax1.set_ylabel('Google Impression') #ax1.set_ylabel('Total Article') #ax1.set_ylabel('Averaged ranking') # 収益グラフ用 ax1.set_ylabel('Profit [¥]') # データの範囲と刻み目盛を明示する。 ax1.set_xticks(np.arange(0, 100, 1)) # データプロットの準備とともに、ラベルと線の太さ、凡例の設置を行う。 #ax1.plot(MONTH, PV, label='PV', lw=1, marker="o") #ax1.plot(MONTH, USER, label='User', lw=1, marker="o") #ax1.plot(MONTH, IMP, label='Google Impression', lw=1, marker="o") #ax1.plot(MONTH, ARTICLE, label='Total Article', lw=1, marker="o") #ax1.plot(MONTH, RANK, label='Averaged ranking', lw=1, marker="o") ax1.bar(MONTH, PROFIT, label='Affiliate') ax1.bar(MONTH, ADSENSE, label='AdSense') ax1.legend() LastMonth = MONTH.tail(1).to_numpy()[0] text_PV = str(PV.tail(1).to_numpy()[0]) text_USER = str(USER.tail(1).to_numpy()[0]) text_IMP = str(IMP.tail(1).to_numpy()[0]) text_ARTICLE = str(ARTICLE.tail(1).to_numpy()[0]) text_RANK = str(RANK.tail(1).to_numpy()[0]) diff_PV = '+' + str(PV.tail(1).to_numpy()[0] - PV.tail(2).to_numpy()[0]) diff_USER = '+' + str(USER.tail(1).to_numpy()[0] - USER.tail(2).to_numpy()[0]) diff_IMP = '+' + str(IMP.tail(1).to_numpy()[0] - IMP.tail(2).to_numpy()[0]) diff_ARTICLE = '+' + str(ARTICLE.tail(1).to_numpy()[0] - ARTICLE.tail(2).to_numpy()[0]) #ax1.annotate(text_PV, xy=(LastMonth, PV.max()), xytext=(20, PV.max()/1.1), arrowprops=dict(arrowstyle="->"), fontsize=20) #ax1.annotate(text_USER, xy=(LastMonth, USER.max()), xytext=(20, USER.max()/1.05), arrowprops=dict(arrowstyle="->"), fontsize=20) #ax1.annotate(text_IMP, xy=(LastMonth, IMP.max()), xytext=(20, IMP.max()/1.05), arrowprops=dict(arrowstyle="->"), fontsize=20) #ax1.annotate(text_ARTICLE, xy=(LastMonth, ARTICLE.max()), xytext=(20, ARTICLE.max()/1.05), arrowprops=dict(arrowstyle="->"), fontsize=20) #ax1.annotate(text_RANK, xy=(LastMonth, RANK.max()), xytext=(20, RANK.max()/1.05), arrowprops=dict(arrowstyle="->"), fontsize=20) fig.tight_layout() # グラフを表示する。 plt.show() plt.close() |