『小説家になろう』時間帯別アクセス数の調査、結果報告:その2
こんにちは!
今回はTwitterで「#なろうアクセス数調査」のハッシュタグをつけてツイートしていた、『小説家になろう』で公開している小説に対してのアクセス数調査の結果を記事にしました。
☆どういった調査を行ったか
5/3(金)の私の小説更新、ツイート、活動報告(小説家になろう内のブログのようなもの)を以下のように行って、読者様の時間帯別の小説へのアクセス傾向を調査しました。
10時:小説更新その1、活動報告その1
11時:ツイートその1
14時:小説更新その2、活動報告その2
15時:ツイートその2
19時:小説更新その3、活動報告その3
20時:ツイートその3
ちなみに悲しい前提:
☆Twitterや活動報告で宣伝しない限り、私の小説はほぼ0アクセスです!
☆調査結果
まず早速アクセス数の結果ですが、以下です。
(『◆昨日のデータ』の方です)
画像を見るのがめんどくさいよ~という方のために、簡単にまとめます。
2桁のアクセス数を突破した時間帯は以下の通りです。
10時、11時、14時、19時
☆結果分析
まずは昨日の結果と比べて変わった点です。
・ 総合アクセス数が落ちました。
・ 朝のアクセス数の方が多くなりました。
そして次に昨日の結果分析を今日の調査結果に合わせて再分析してみます。
↓以下、昨日の結果分析
① 昼>夜>朝、朝・夜の投稿は『悪手』。
② ツイートと活動報告は時間をずらして行った方がいい。
③ ご飯時、おやつ時はTwitter見る人が多いから投稿◎。
①に関しては『あまり関係がない』ことが分かりました。Twitterのフォロワー様たち、読者様たちの生活リズムが多少関係するくらいなのかな、という認識です。もっと長いスパンで統計をとれば見えてくるものもあるかもしれませんが……
正直言って私のアクセス数の母数がそもそも少ないという問題から、あまり正確な統計は採れない気がしています。
②に関して、昨日時点以下の判断基準を設けていました。
☆明日の総合アクセス数が今日の総合アクセス数を上回っている
☆アクセス数の差が時間帯別で縮まっている
両方とも、今回の調査結果からは確認が取れませんでした。
そのため、活動報告とツイートをバラして行う意味は薄そうです。
少なくとも私のアカウントでは、ですが。
そもそもTwitterでのフォロワー様は大体が『書く専』で、活動報告を読む方は『読む専』の方が多いのかなと思っています。なので、Twitterを見るユーザーと活動報告を見るユーザーは被らないのではないかと推測しました。
なので、もしかすると『読む専』のフォロワー様を多く持つTwitterアカウントを持つ方に関してはツイートと活動報告をバラして行う効果はあるかもしれません。
②に関しての総括としてはそんなところです。
③に関して、これも①と同様で受け取り側の生活リズムによるところが大きいと思います。なので断言はできません。
結論:分かりませんでした!!
ただ活動報告とツイートは必ずアクセス増加の一因となってくれるので、必ず行わなければならないということは再認識できました!
ちょっと2日でアクセス数の傾向を調べるとか無理でした。
もうちょっと分析範囲広げないと……。
なので、もう少し自分の連載を続けた後で、改めて統計取ってみようと思います。
さて、これにて調査は一旦以上です。
それと、もしご興味湧きましたら私の小説をご一読願います。
2作品ありますので、お気に召しそうな方をどうぞ(もちろん2つ見るのも◎)
タイトル:【表現力の薄れる世界で戦う《言の葉の守り人》】
奪われてしまった世界の表現力を取り戻すため、"言葉の力"を使って戦う異能力系コメディ小説です。現在がんばって連載中。
タイトル:【俺が好きなのどっちなの!?『生ワキ』それとも『あの娘』だけ!?】
『恋』と『下心』の違いとは何か。主人公が学園祭準備での女子との触れ合いを通じて純粋な自分の気持ちを追い求める純恋愛コメディ小説。こちらも現在がんばって連載中。
それでは、ここまで読んでくださりありがとうございました!!
『小説家になろう』時間帯別アクセス数の調査、結果報告:その1
こんにちは!
今回はTwitterで「#なろうアクセス数調査」のハッシュタグをつけてツイートしていた、『小説家になろう』で公開している小説に対してのアクセス数調査の結果を記事にしました。
☆どういった調査を行ったか
5/2(木)の私の小説更新、ツイート、活動報告(小説家になろう内のブログのようなもの)を以下のように行って、読者様の時間帯別の小説へのアクセス傾向を調査しました。
10時:小説更新その1、ツイートその1、活動報告その1
14時:小説更新その2、ツイートその2
17時:活動報告その2(忘れてた!)
19時:小説更新その3、ツイートその3、活動報告その3
ちなみに悲しい前提:
☆Twitterや活動報告で宣伝しない限り、私の小説はほぼ0アクセスです!
☆調査結果
まず早速アクセス数の結果ですが、以下です。
画像を見るのがめんどくさいよ~という方のために、簡単にまとめます。
2桁のアクセス数を突破した時間帯は以下の通りです。
10時、12時、14時、15時、17時、19時
☆結果分析
この結果のみから分析できたのは以下の3点。
① 昼>夜>朝、朝・夜の投稿は『悪手』。
② ツイートと活動報告は時間をずらして行った方がいい。
③ ご飯時、おやつ時はTwitter見る人が多いから投稿◎。
①に関しては単純にアクセス数を見てです。ただこの結果になったのは休日であったためと、今日だけの特殊事例だったかもしれません。
なので、こちらに関しては引き続き明日も同じ時間帯で調査しようと考えています。
②に関しては14時にするのを忘れていた活動報告を行った17時台の伸び率が顕著だったので、自分の中では確定的です。
でもこれも"たまたま"かもしれませんので、明日はツイートと活動報告バラして行います。
結果、
☆明日の総合アクセス数が今日の総合アクセス数を上回っている
☆アクセス数の差が時間帯別で縮まっている
のどちらかが確認できれば実証となるかと思っています。
③に関して、12時と15時は何もアクションを起こしていませんがアクセス数が伸びています。
これはご飯時、おやつ時に私の10時時点と14時時点のツイート・活動報告を見てくださった方が多かったのかなぁと予測。
逆に夜のツイートは1度見られたらそのままスルーされることの方が多いみたい。
RTも昼に比べると全然されていないようですし。
③に関しても確定的ではありませんので、明日の調査しだいかな、と。
明日の調査ですが、なるべく今日の予定に沿った形で行おうと思っています。
そのため以下の更新・ツイート・活動報告のタイムスケジュールを組みました。
10時:小説更新その1、活動報告その1
11時:ツイートその1
14時:小説更新その2、活動報告その2
15時:ツイートその2
19時:小説更新その3、活動報告その3
20時:ツイートその3
うーん・・・・・・ちゃんと忘れずにできるだろうか(不安)
さて、明日に続きますが今日は以上です。
こういったアクセス数の調査、需要があったら「スター」やRTしてもらえると嬉しいです。需要無さそうならやりません。。。
逆に受けがよかったら『平日』の調査もやろうかと思っています。
それと、もしご興味湧きましたら私の小説をご一読願います。
でも、アクセス数の調査としては違う係数が混ざってしまうことになるので・・・
アクセス数調査を行っていない方の小説を宣伝させていただきます。
タイトル:【表現力の薄れる世界で戦う《言の葉の守り人》】
奪われてしまった世界の表現力を取り戻すため、"言葉の力"を使って戦う異能力系コメディ小説です。現在がんばって連載中(なおこちらも0アクセス系なやつ・・・)。
それでは、ここまで読んでくださりありがとうございました!!
明日に続きます~
【MF文庫ライトノベル新人賞】処女作は2次選考落ち・・・(´;ω;`)
去年の12月に、初めてライトノベル新人賞に応募しました。
小説を書き始めたのも昨年の秋くらいから。
だから自分の作った物語が人目に触れるというのはどこか恥ずかしくもあり、ドキドキとワクワクを繰り返しながら、4月に発表される結果を心待ちにしていたのでした。
・・・結果、
2次選考落ち!!。+゚・(pωq)・゚+。
1次選考を通った時は「あれ? マジで? 初作品なのに通った!?」などと浮かれ騒いでいたものですが、まぁ現実そんなに甘くないですね。
でも、自分の『大好き』を込めた作品だけに思いれも強く、やはりショックです。
MF文庫ライトノベル新人賞では、何次選考落ちでも『評価シート』をもらえるようなので、自分の作品のどこを良く評価されたのか、そしてどこを悪く評価されたのか、しっかりと受け止めて次の作品に繋げようと思います。
そして必ず改稿して、投稿作品『カレーなる異世界ライフ!!』への情熱をここで終わらせはしません!!
評価シートを待つ間、居ても立っても居られないので、自分で悪かったと思う点を改善してみて、『小説家になろう』に投稿して読者様に色々感想をいただきたいと思ってます。
ただ、今回作品にだけこだわってもいられません。
やはり『自分のやりたいこと』と『読者様のニーズ』が違うと読んではもらえないと思いますし。
なのですでに着想のある別作品のプロットも同時並行で書き起こしつつ、現在『小説家になろう』で連載中の『表現力の薄れる世界で戦う《言の葉の守り人》』も書き進めていこうと思っています!!
どくしゃのみなさま:『え? それって執筆の2正面作戦ならぬ3正面作戦? 戦力の分散は悪手だぜ?』
わたし:『だいじょうぶ。GW中に連載以外はなんとかするから!!』
・・・忙しくなりそうだぜッ!!
※(自分で忙しくしてるだけ)
あと、自分の『要旨をまとめた文章を短い時間で書く』という力を鍛えるため、これからは積極的に他作品のレビューを行っていきたいとも思っています。
こちらもGW中に最低10作品やろうかと。
・・・・・・忙しくなりそうだぜッ!!
※(自分で忙しくしてry
頑張るぞー!!
という気合いを入れたいがために更新したブログなのでした。
今回は以上です。
次はもうちょっと誰かのためになるような記事を更新します。。。
【ラムダ式を学ぶ】第1回 中学生にも分かる! 関数型プログラミングとは?
前回の記事でお話しました通り、今日からJavaのラムダ式を理解するための記事を連載します。
関数型とはそもそも何なのか、ラムダ式とは何なのか、どういったタイミングで使うのかなどを段階的に解説していきます。
今回は第1回ということで、「関数型プログラミングとは何か」、そして「オブジェクト指向型プログラミングとは何が違うのか」を滅茶苦茶分かりやすくして解説していきたいと思います。
✩目次
1.関数型プログラミングとは何かを中学1年生にも分かるような例で説明するよ
変数ってあるじゃないですか。xとかyとか。
例えば、
1-1.
2 + 3 = 5
という式がありますよね。
この3の部分をxに、5の部分をy置き換えると
1-2.
2 + x = y
という式になります。
この時、xに3を入れると、当然ながらyは5になりますね。
ではxに4を入れたらどうなりますか?
1-3.
2 + x = y x <- 4 ※xに4を入れる 2 + 4 = y y = 6
yは6になりましたね。
xに入れる値によって、計算結果であるyの値が変わります。
このxに入れる値によってyの値が決まることを、
『yはxの関数である』
と言います。
出てきました、関数という言葉。
上記の例では関数xには3や4などの数値を渡してきましたが、関数を渡すこともできます。
以下の関数をご覧ください。
1-4.
y = x + 2 ・・・① x = -y + 6 ・・・②
①の関数に②の関数を渡してみましょう(数学では代入と習ったハズ)
1-5.
y = (-y + 6) + 2 2y = 8 y = 4
①の関数に②の関数を入れた結果、yの値が求まりましたね。
大分遠回りな説明から始まりましたが、1-5の例こそが関数型プログラミングで実現できることなんです。
つまり、関数(①)に関数(②)を渡した結果(yの値)を取得できるようになるプログラミング手法、それが関数型プログラミングです。
(※ここではそう結論付けますが、実際に決まった定義があるわけではありません)
2.オブジェクト指向型と関数型の違い
1)背景の違い
結論から言うと、2つは全くの別の用途を目指して作られた技法です。
派閥が違うとか、関数型言語がオブジェクト指向型言語の上位互換的に作られたものであるとか、そういうことではありません。
それぞれが、それぞれの用途のために作られました。
これからその2つの生まれた背景をWikipediaの情報をまとめて説明します。
まずはオブジェクト指向の背景から。
(~背景~)
計算機(PC)の発展によって大規模なシステムが構築できるようになってきたけど、そのシステムの動きを上から下まで手続き的に書いていたら超長いコードになるし超分かりにくいから開発が超大変だよね。
だから同じ定義と処理を持つものはモジュールという単位でまとめてしまって、ついでに管理しやすくなるような設計をしたものをオブジェクトと呼んで、再利用性の高いコードにしよう!! ついでにオブジェクトには人が親しみやすい名前をつけて、そのオブジェクトの振る舞いが一発で分かるようにしようね!! そうすればきっとコミュニケーションが捗るハズ・・・
なげーよっ!!!
ごめんなさい、長かった。
つまり、 長いコードを短く分かりやすくして開発コストを下げようという目的のため生まれたのがオブジェクト指向型言語です。
次に関数型の背景を。
(~背景~)
プログラミングをより数学的記法に近づけよう!
・・・以上!!
・・・・・・え? 終わり?
終わりです(スマヌ)。
なんで数学的記法に近づけたかったの? という説明はありませんでした。
その他は調べようと思ってもEnglishな記事しか出てこなかったのです。
ただ、数学的な記法は馴染みが無い人にとっては分かりにくいですが、無駄を極限まで削って書かれるので簡潔であるという特徴があります。
プログラミング言語を高度で効率的な計算に用いたい、という考えや、純粋により短くより美しくを追求したかった、のではないかなと私は推測しました。
2)特徴の違い
早速、オブジェクト指向から。
『名前』という定義と、『意気込む』という処理を持っている『社会人』というオブジェクトがあるとします。
2-1.
public class 社会人{ String 名前 = "涼風青葉"; public void 意気込む(String セリフ) { if ("涼風青葉".equals(名前)) { System.out.println(セリフ); } else { System.out.println("・・・・・・・・・・"); } } }
そして『社会人』オブジェクトを利用した以下のような処理があるとします。
2-2.
private static void method1 (社会人 obj) { obj.意気込む("「今日も1日がんばるぞいっ!」"); // ① }
この処理を通った時、①で標準出力した時の結果はどうなるでしょうか。
「今日も1日がんばるぞいっ!」って出力されますかね・・・?
正解は『分からない』なんですよねぇ・・・
【引用:涼風青葉 - HIDE | Illustrations - MediBang】
確かに、この社会人オブジェクトの『名前』という項目には「涼風青葉」という初期値が入っています。しかしもしかすると、この社会人オブジェクトのインスタンスが生成された後に『名前』には「滝本ひふみ」という値が設定されているかもしれません。
つまり、そのオブジェクトの設定値に依存するわけです。
また、以下の例を見てみましょう。
オブジェクトは同時に異なる2つのインスタンスを持つことができる、ということを説明するための例です。
2-3
public static void main(String[] args){ 社会人 obj1 = new 社会人(); obj1.名前 = "涼風青葉"; obj1.意気込む("「今日も1日がんばるぞいっ!」"); // ① 社会人 obj2 = new 社会人(); obj2.名前 = "滝本ひふみ"; obj2.意気込む("「今日も1日がんばるぞいっ!」"); // ② }
上記の処理を通った際に出力される内容は以下の通りです。
①の時:「今日も1日がんばるぞいっ!」
②の時:「・・・・・・・・・・」
①と②では、同じ社会人オブジェクトの同じメソッドを全く同じ引数で呼び出しているのに実行結果が異なりますね。
何故なら①と②では異なった状態のインスタンスを呼んでいるからです。
①では涼風青葉という状態の社会人オブジェクトのインスタンスを、②では滝本ひふみという状態の社会人オブジェクトのインスタンスを使用して『意気込む』という処理を呼んでいたのです。
このように、オブジェクト指向型プログラミングには、処理の実行結果がオブジェクトのインスタンス状態に左右されるという特徴があります。
次に、関数型を。
以下のような『意気込む』という処理があったとします。
2-4.
private static void 意気込む(String セリフ) { System.out.println(セリフ); }
この時、引数『セリフ』に『"「今日も1日がんばるぞいっ!」"』を渡してあげると実行結果は、
「"今日も1日がんばるぞいっ!"」
となります。
また、引数『セリフ』に『"「・・・・・・・・・・」"』を渡してあげると実行結果は、
「・・・・・・・・・・」
となります。
それでは以下のように処理を呼び出してみます。
2-5.
public static void main(String[] args){ 意気込む("「今日も1日がんばるぞいっ!」"); // ① 意気込む("「・・・・・・・・・・」"); // ② 意気込む("「今日も1日がんばるぞいっ!」"); // ③ } private static void 意気込む(String セリフ) { System.out.println(セリフ); }
上記の処理を通った際に出力される内容は以下の通りです。
①の時:「今日も1日がんばるぞいっ!」
②の時:「・・・・・・・・・・」
③の時:「今日も1日がんばるぞいっ!」
当然の事かと思われるでしょうが、①と③で同じ引数を渡した結果は同じになります。
このように、関数型プログラミングには外の情報に実行結果を左右されず、同じ引数を渡せば必ず同じ結果が返ってくるという特徴があります。
結局何が違うの? を説明すると、
オブジェクト指向型はそのオブジェクト自体に状態という独自性を持たせることで、同じ処理から別の結果を生み出すことができる。
一方で関数型はいつどこから呼ばれても全く同じ結果を返すことができる。
上記のような違いがあります。
3.簡単なラムダ式
お待たせいたしました。ようやくラムダ式が登場します。
ただ、まだこの例は実用性が皆無です。
それを念頭に、「ラムダ式ってこういう形で書くんだ」ということを知って頂ければと思います。
まずは早速サンプルコードから見てください↓
3-1. public class SampleRamdaTest { public static void main(String[] args) { CalcIntf plus = (n1,n2) -> n1 + n2; // 足し算用の関数が入った変数だよ CalcIntf minus = (n1,n2) -> n1 - n2; // 引き算用の関数が入った変数だよ CalcIntf multi = (n1,n2) -> n1 * n2; // 掛け算用の関数が入った変数だよ calc(plus); // 足し算用の関数を引数にしたよ calc(minus); // 引き算用の関数を引数にしたよ calc(multi); // 掛け算用の関数を引数にしたよ } /** * 5と2という数字を使って何らかの計算がしたいメソッド */ private static void calc(CalcIntf func) { int y = func.calculate(5,2); System.out.println("計算結果は" + y + "だよ"); } /** * 計算インターフェース */ @FunctionalInterface public interface CalcIntf { public int calculate(int n1,int n2); } }
処理結果は以下です。
計算結果は7だよ 計算結果は3だよ 計算結果は10だよ
わかりませんね?
わからないでいいです、以下の説明の後に何となくわかってれば。
それでは解説をしていきます。
上記の例で注目して欲しいポイントは以下です。
① 計算インターフェース
② 「(n1, n2) -> n1 + n2」という変な式。
③ 値ではなくて関数(n1 + n2など)が引数になっている。
① 計算インターフェース
Javaのインターフェースについてはここで説明しません。
詳しくは他サイト様をご覧ください。
この記事においてはインタフェースの「@FunctionalInterface」に注目です。
このアノテーションを付けたインターフェース内では、2つ以上のメソッドを定義することができなくなります。
つまりですね、ラムダ式を使うためだけのインターフェースだよ宣言なんですね。
2つ以上定義しようとするとコンパイラに怒られます。
なんで1つだけなの?
理由は以下②で説明します。
② 「(n1, n2) -> n1 + n2」という変な式
色分けして、日本語とソースコードの対応を下に示します。
CalcIntf plus = (n1, n2) -> n1 + n2 ;
計算インターフェースのcalculateメソッドは、自身の引数n1, n2を使ってn1 + n2をする。
「calculateメソッドだけソースコードに対応してなくない?」
と思いましたよね?
実はこれが①で言っていた、ラムダ式を使うためのインターフェース内にメソッドは1つしか定義してはいけません、という制限の理由です。
「計算インターフェース内にメソッドが「calculate」1つしかないんだから、ラムダ式内で使われるメソッドは「calculate」だよね」
と勝手にコンパイラが自動的に判断してくれるんです。
だから、コンパイラの自動判断を邪魔しないように、2つ以上メソッドは定義しちゃダメなんですよ、ということだったんですね。
③ 値ではなくて関数(n1 + n2など)が引数になっている
関数(n1 + n2という式)を関数(calcメソッド)の引数として渡し、そしてcalcメソッド内でその式を利用して計算ができています。
冒頭で述べた通り、関数に関数を代入して結果を求める事ができていますよね?
ラムダ式の基本的な部分の解説は終了です。
次回からは実用的な例を見ていきたいと思います!
4.おわりに
さて、オブジェクト指向型と関数型の違いを理解することはできたでしょうか。
今回は滅茶苦茶簡単に説明することに主眼を置きました。
だから説明の足りていない部分はいっぱいあります。特に最後のラムダ式とかは。
でも、Javaプログラマーや、その他オブジェクト指向型言語プログラマーにとって、今まで壁一枚隔てて考えられていた関数型という考え方を少しでも身近に感じていただくことができたなら幸いです。
次回以降は、多少実践的なラムダ式の使い方を見ていこうと考えています。
何か分かりにくかった説明部分などあればコメントいただければ幸いです。
あと、この記事でオブジェクト指向型と関数型の違いが理解できたよ! って方は「☆いいね」つけていただければ嬉しいです。明日の勉強の励みとなります。
それでは今回は以上となります。
ここまでご精読いただきありがとうございました。
次回記事のお報せとその記事作成のための更新小休止のお報せ
ちょっとお勉強期間のためブログ更新を数日ストップします!!
先週? 先月? からブログ記事書き始めまして、ネタもあったから毎日上げ続けてたんですが、そういった小ネタも思いつくところを書き切ってしまいました。
でも書きたいネタはまだいっぱいあるんです。
そのうちの1つが関数型プログラミングについて。
Java8からサポートされ始めたラムダ式(Javaで使える関数型プログラミング)について業務でたまに見かけるのですが、コーディングしている人間にコードの内容を聞くも、
「よく分からんけどネットで見つけた文法そのまま使ったら動いた」
って言う人が結構いて、
「動く理屈を分からんで使うのってどうなの?」
とモヤモヤする機会が多いんですよ。
(※空飛ぶ原理の分かってない飛行機は一般利用されてるじゃん、とかは言わないで)
「ああ、関数型プログラミングね。ラムダ式のことでしょ? アロー演算子(->)使ってコーディングするやつ。知ってる知ってる」
ってなりがちです(ソースは私)。
でもそれは"理解してる"ということからは程遠いと思う。
「理解してなくても使えりゃいいじゃん、飛行機しかりさ」
って言う人もいるでしょう。
そうなのかもしれません、別に気にしない人は気にしないと思いますし。
ただ私個人としては
せっかく使うなら理屈をしっかり理解して、
コピペでの使いきりの知識にはしたくない
です。
そのため、これからラムダ式をしっかり理解するための勉強をしたいと思います。
そしてその成果を記事にできれば、と。
記事では単なる使い方の紹介ではなくて、
・そもそも関数型とオブジェクト指向型の生まれた背景
・ラムダ式のサンプルと解説
・ラムダ式を使うべきタイミングとは
・便利なラムダ式の紹介
・Javaにおけるラムダ式導入ケーススタディ(これは難しいかもしれないけど)
などをしっかり抑えていきたいと思います。
あれ? なんか理想を列挙してみたけど結構ハード・・・?
( ̄Д ̄;;
・・・頑張ります!!
なので次回からは
【オブジェクト指向で凝り固まった頭にJavaのラムダ式を入れてみる】
というタイトルの記事でラムダ式についての連載をしていこうと思います。
興味を少しでも持っていただけたら読んでいただきたいです。
以上!!
ご精読ありがとうございました!!