プログラミング初心者だけどRubyでメタ検索サイトを作ろうとしてる話②
こんにちは。
前回は簡単な検索サイトクローリングプログラムを作成しました。
プログラミング初心者だけどRubyでメタ検索サイトを作ろうとしてる話① - コロンブスの卵
今回はRailsを使ってブラウザ上から実行できるようにリメイクしていきたいと思います。
※初心者が初心者のために書いているのでお手柔らかにお願いします。
- まずはRailsでアプリを新規作成
- Model・View・Controllerを編集
- generateコマンドでページ生成
- Model
- View
- Controller
- ルーティング設定
- generateコマンドでページ生成
- 動作確認
当たり前のはずだけどコロナ対策に自粛が有効な理由を今さら調べた話
先日、小池都知事から週末の外出を控えるように要請がありました。
会見が行われたのは3月25日で、これをきっかけにコロナウィルスへの対応を急変更した企業も非常に多いようです。
最近また都内で感染者が急増したのは
- 前の3連休での外出が多かったから
- オリンピック延期したからぶっちゃけたから
などと世間では言われてますね。
ここで僕は「どうして不要不急の外出を控えることがコロナ対策になるのか?」という疑問を持ちました。
もちろんコロナウィルスに限らず、これまでのインフルエンザ対策についても「人混みを避けるように」というのは毎年言われてきました。それでも「その当たり前と思って実践していることが、なぜ効果を発揮するのか?」という疑問を解決すべく、インターネットで情報を集めました。
新型コロナウィルスについて知る
3つの疑問
疑問1. そもそも「ウィルスに感染した」ってどういう状態?
ウィルスというのは細菌よりはるかに小さい感染性微生物のことです。
ウィルス自体は細胞を持たないのでヒトなど、他の生物の細胞を乗っ取ることで増殖を図ります。この細胞がウィルスによってジャックされた状態を「感染した」と呼んでよさそうです。
ウィルスによって支配された細胞は本来の働きを果たすことができず、ウィルスの増殖に使われたあとに死んでしまいます。細胞が死ぬと増殖した新しいウィルスが”放出”されて、また他の細胞に感染するようです。
疑問2. 新型コロナウィルスの感染経路は?
ウィルスは感染力が高いという特徴がありますが、主に感染経路は、
コロナウィルスは特に飛沫感染のイメージが強いですね。ニュースではマスクなしで咳やくしゃみをするとそれだけで事件になった例もありました。
ウィルスは口や鼻から取り入れることでほぼ感染するので鼻水や唾液には当然多くのウィルスが含まれております。すると満員電車などの密集空間で咳やくしゃみをすることは”テロ”と呼べるレベルになりそうです。
後に政府によって禁止されましたが1月~2月はマスクの買い占めが話題になってました。マスクが不足しすぎて本当に必要な人の手に渡らないのは転売屋が思っている以上に深刻な事態です。それが社会の疲弊などによって自分に返ってくることも考えるべきだったでしょう。
もう1つの接触感染は、感染者から飛び出たウィルスが物に付着しそれに触れることで起こります。体外に出たウィルスは最終的に死ぬものの一定時間は生存し、再び感染する力を持っています。なので定期的に手洗いうがい、アルコール消毒をするのが有効ということです。
現時点では輸送荷物に触れることや食べ物そのものから感染した報告はないようです。また空気感染はしていないという見解であり、そうであれば「自粛によって感染症拡大の抑止を図る」という発想に納得感が増します。
ウイルスの感染経路・その対策は?病院でうつらない?二次感染予防について解説 – EPARKくすりの窓口コラム|ヘルスケア情報
疑問3. 1回治癒したら耐性がつくの?
ほとんどの場合は治癒することが可能で、「症状が収まった・検査で陰性に戻った」ことを確認して治癒したと判断するそうです。
一般的に一度ウィルスに感染してから治癒すると、対処法が体内に記憶されるので免疫がつきます。
これを言うと叩かれるかもしれないが「自粛なんてせずに全員が免疫を持てば終息に向かうのではないか」と思ったこともありました(ちゃんと考えればオーバーシュートに陥るリスクは高く、現にイタリアでも医療機関が追い付いておらず混乱しています。すみません。)。
ちなみにこれは”集団免疫の獲得”と呼ばれる概念らしいですが、厚生労働省の資料には「現在の感染状況は集団免疫を期待できるレベルではありません。」と書かれてあります。
また再感染の可能性についても現段階で確かなことは判明していないようです。
万が一が起きてからでは遅い。そのための自粛。
既に多くの先進国がロックダウンの状況に追い込まれています。小池知事の会見にも出てきたキーワードだと思われますが、このような国はまず感染急拡大によってオーバーシュートに陥っていることが多いです。
昨今の動きから「いつロックダウンが起こるか分からない」と不安になっている人も多いのではないでしょうか。しかし逆に、医療機関が正常に回るレベルであれば致命的な混乱は避けられると考えられるかもしれません。
そのためにはオーバーシュートを防ぐことが必要であり「最低限の経済活動は行いながらクラスター化を防ぐための自粛」というのは仕方ないでしょう。
余談ではありますが、個人的に新型コロナウィルスで怖いのは社会的混乱だけでなく、感染者に対して堂々と差別が行われるのではないかという点です。会社員などで一度感染してしまった人は復帰し辛くなるといった状況も起こりうるのではないでしょうか。速やかに混乱が終息に向かうことを祈ります。
プログラミング初心者だけどRubyでメタ検索サイトを作ろうとしてる話①
あるとき突然「自分もWEBアプリ開発者になりたい」と思ってRubyの学習を始めました。メタ検索(検索サイト横断)サイトを作りたいと思って、WEBクローリングの機能を使ってできないか検討中です。入門書はモチベが保てなくて辞めました。
今回はRailsを使わずにMVCモデルのmodel部分を単独作成したところまで記事にしました。
※文系未経験初心者で忘備録も兼ねているものなのでお手柔らかにお願いします。
WEBクローラーとは
WEBクローラーとはWEBサイトを巡回して情報をピックアップするプログラムのことです。僕はWEBクローラーの機能を使ってメタ検索サイトを作りたいと考えました。
メタ検索サイトというのは複数のサイトを横断検索して結果をまとめて表示するもののことです。例えば複数のサイトを横断して一番安い航空券を見つけられるスカイスキャナーというサイトもメタ検索サイトに分類されると思います。
完成物のイメージ
僕のイメージとしては
- 前提として横断対象の検索結果ページのURLが「固定URL+検索ワード」で成り立っている
- 検索結果ページURLの固定部分をWEBクローリングに組み込んでおく。
- キーワードを入力してプログラムが実行されると「http://〇〇〇+検索ワード」を対象にWEBクローリングが実行される。
- WEBクローリングして得たページのソースから必要部分をピックアップして変数に入れる
- メタ検索結果ページに遷移する。
というメカニズムでのコーディングを考えました。
入門書は続かなくて挫折した
以前から何かしらプログラミングを学ぼうと考えていた時期がありました。最初は”大は小を兼ねる理論”でJavaを始めましたがモチベーションが続かず挫折。それから時間が経ってRubyを始めようと思い、入門書を購入するも目的もなくひたすらインプットを続ける作業が苦痛で辞めてしまいました。
そこで僕が至った結論は「独学ならより具体的な作品の方がモチベーション保てるし後から知識はついてくる」ということです。実現したい機能をネットで調べてあとからコードの意味や動作のメカニズムを理解していくという感じですね。
1.RubyでWEBクローリングのプログラムを作成
まずはRailsを使わずにターミナル上で動作するWEBクローリングを作成します。
今回述べる部分はほとんどこちらのサイトを参考にさせていただきました。
1-0. open-uriとnekogiri
今回はopen-urlとnekogiriという機能を使います。open-uri=対象ページのHTMLを取得、nekogiri=分析・抽出といった役割の違いがあると思われます。
open-uriは標準で入っているのに対してnekogiriは後から自分でインストールする必要があります。ちなみにopen-ur"l(エル)"ではなくur"i(アイ)"です笑
1-2. コードを記述
コードエディタで以下のプログラムを記述します。
参考サイトを検索用にアレンジし、自分なりに補足を加えました。
#1 #open-uriとnekogiriの呼び出し #openはページのHTML取得、nekogiriは解析して必要な情報を抽出という役割分担 require 'open-uri' require 'nokogiri' #2 # 検索URLの形成 #ARGV[0]では検索キーワードを1個だけ読み込める ARGV[0] #keywords = ARGV[0] url = 'https://' + ARGV[0] charset = nil #3 #先に読み込んだopen-uriを使用 #ここでは通常の呼び出しではなくブロック呼び出しを行う #open(url)でWEBページをオブジェクトとして読み込み #do~endがメソッド(引数のかたまり) #do~endをひとかたまりで処理して変数htmlに渡す #変数htmlには対象ページのソースが全て含まれている html = open(url) do |f| #urlをオブジェクト化し|f|内に配列化 charset = f.charset # fの文字コードを返す f.read # WEBページfを読み込んで文字列化し、変数htmlに渡す end #4 # open-urlで読み込んだHTMLをnekogiri解析用に変換 doc = Nokogiri::HTML.parse(html, nil, charset) #5 #titlesのブロック化 titles = [] #6 #抽出部分の指定 #Xpath以外ではCSS方式での指定が可能 #指定した要素に該当するものを全て取得して|node|に配列化 doc.xpath('//div/p[@class="text"]').each do |node| #7 #取得した要素のうち、aタグのなかのテキスト部分を取得 title = node.css('a').inner_text #そのaタグの中のテキストをtitles配列に入れ込む titles << title end #今回は使わない #入れ込んだtitles配列をファイルに書き込む #titles.each do |text| # File.open("output.txt","a") do |f| # f.puts text # end #end #8 #今回はテキストファイルにアウトプットする代わりにインスタンス変数に移す #titile配列を全てインスタンス変数@resultに格納 titles.each do |result| @result = puts result end #9 インスタンス変数@resultにtitles配列が全て格納されていることを確認 puts = @result
2. 実行方法
ターミナル上で以下を叩いて実行。
$ ruby 〇〇(プログラム名).rb △△(ARGVに格納したいキーワード)
上手くいけば対象URLの抽出したい部分が表示されるはずです。
次回に続く
WEBクローリングのプログラム単品はできたので次はブラウザ上で実行できるようにしたいです。検索ボックスにキーワードを入れると裏でプログラムが動いて、実行にページ遷移してリザルトが表示されるようにします。
中学生の頃ハウツー系のブログを書いてた経験と、今になって思うこと
こんにちは。
僕は10年前に中学生だった頃にパソコンなどに関するハウツー系のブログを書いておりました。
だいぶ間が空いて再びブログを始めたのですが、今回は当時の振り返りを記事にしたいと思います。
- 稼げるほどではないけどアクセスはあった
- 「まず記事をたくさん書け」はおそらく正しい
- 10年前は企業が検索エンジンを食ってた印象はなかった
- それでも検索エンジンからの流入は強い
- 扱うコンテンツの内容によってアクセスの性質も変わる
- 再びSEOに興味を持った理由は就活でマーケティングという職種を知ったから
稼げるほどではないけどアクセスはあった
僕がブログを書いていたのは2009年~2011年の3年ほどで、トータル記事は100個くらいでした。あるときに面倒になって辞めてしまったのですが、最近気になって確認してみたらトータルで30万PVほどのアクセスでした。
中学生の頃は余裕があったのでブログを書くのに時間を割けたのですが、学年が上がるにつれて受験勉強に追われてフェードアウトしたのだと思います。当時の僕は「アフィリエイターになって稼ぎたい」という欲求を持っていたのですが、「専門でやっている人には勝てないな」と感じていたので本気にはなれなかったです。
「まず記事をたくさん書け」はおそらく正しい
もしアクセスを伸ばしたいと考えるのであれば、キラーコンテンツを作ることが課題だと最近まで思っていました。キラーコンテンツというのは”確実に需要があるネタ”といった1回書いてしまえばアクセス源として計算できる記事を指してます。Twitterで言うと「あるつぶやきがバズって一躍有名人になる」といった感じです。
しかし今になって当時を振り返ると、最初は「まずは記事をたくさん書くことが最大限のSEO」になるのではないかと思ってます。
というのも仮説レベルではありますが、以下の2つの理由があるからです。
- 早めに記事をストックしておくことで関連記事から読んでくれる機会を損失せずに済む。
- パッと見でたくさん記事を書いた実績があると読者からの信頼を得やすい=権威を形成する。
ちなみに
- 流入ルートの確保
- 権威(信ぴょう性含む)の形成
- 差別化されたコンテンツ
この3つがサイトを成長させる3要素だと考えております。
自分が運営していたブログでも更新がストップしてからコメント欄に質問を受けていたこともあり、例えばハウツー系のブログにおいては記事を多く書いていること=その分野に対する知識が深いという印象を読者に与えやすいのではないかと思いました。これがサイトを成長させる要素として僕が2つ目に挙げた権威の形成なのではないかと思いました。
10年前は企業が検索エンジンを食ってた印象はなかった
グーグルで検索すると結構な頻度で企業メディアが検索結果上位に来るのではないでしょうか。10年前に僕がブログをやっていた頃はそんな印象はなかったですし、そのことが僕にとって気になり始めたのは大学生になってからです。
Google検索のアルゴリズムでも1ページあたりのコンテンツの量(=文字数)が大事だというのは言われていますし、そうなると資金力があってコンテンツ制作を外注できる法人の方が有利だという印象です。メジャーなキーワードで検索すると上位に来るのは似たりよったりのページが多い、このような現象は10年前にはなかったような気がします。
それでも検索エンジンからの流入は強い
資金力のある法人の方が有利だと言えども、何だかんだで検索エンジンからの流入は主流だと思います。特にハウツー系の読者層は、例えば「エラーを解決してくれる情報が知りたい」といった悩みありきになってくると思います。
ハウツー系の場合は「何となくタイトルで興味を持ったから」という理由で読んでくれる機会は少ないと考えられるため、検索エンジンからの流入が大事になると思いました。ブログサービスを利用するメリットとして新着記事一覧に表示されるというメリットはありますが、ターゲッティングとしては非効率かもしれません。
扱うコンテンツの内容によってアクセスの性質も変わる
ハウツー系は先に述べたように特定の悩みを持った読者にアプローチするため、関連記事を読まれることは少ないかもしれません。しかし他のジャンルになればその特性を活かした戦略を練る必要があると思います。
例えば
- 恋愛系・・・自身の体験を交えることでよりリアリティのある内容にする。単純に読み物として面白いものにする
- 投資系や英語系・・・「自分にも出来る」と思えるような再現性のある内容にする
といった戦略があるのではないでしょうか。
就活のために応用情報技術者(AP)を受けたけど役に立たなかった話
こんにちは。
今回は「大学3年生のときに就活に備えて応用情報技術者の資格を取得したけどたいして役に立たなかった話」をしたいと思います。
- 応用情報技術者とは
- 応用情報技術者試験の科目・難易度
- 受験のきっかけは学生時代に頑張ったことがなかったから
- 3ヶ月の勉強期間で何とか一発合格!成績は?
- しかし就活ではそんなに役に立たなかった理由
- 就活で行き詰っても「資格に走るのが不正解」ということだけは言える
応用情報技術者とは
応用情報技術者とは情報処理資格の1つです。すごーく簡単に言うと「IT検定」みたいなものです。
情報処理推進機構が運営している資格試験はITパスポート、基本情報技術者、ネットワークスペシャリストなどがあります。情報処理技術者向けの試験では基本情報技術者に続く2段階目の資格になります。
応用情報技術者試験の科目・難易度
応用情報技術者試験は択一問題で構成された午前試験と、記述式問題から構成された午後試験に分かれます。午前と午後の両方で60%得点すれば合格です。
午前問題は大きく3つのジャンルが試験範囲です。
午後問題は11個の大問のうち4つに解答する形式となっております。ただし情報セキュリティは必須解答なので実質3つから選択することになります。
- 情報セキュリティ(必須)
- 経営戦略
- プログラミング
- システムアーキテクチャ
- ネットワーク
- データベース
- 組み込みシステム開発
- 情報システム
- プロジェクトマネジメント
- サービスマネジメント
- システム監査
難易度としては合格率20%前後を推移しています。
応募者数が約5万人、受験者が約3万人、合格者が5000人~8000人くらいです。
受験のきっかけは学生時代に頑張ったことがなかったから
受験に踏み切った理由は新卒未経験でエンジニア/プログラマーになろうと考えたからです。しかし僕は文系の学生で情報工系ではありません。プログラミング経験もなしです。きっかけは大学3年生になってサマーインターンの選考結果が酷かったからです。就活では選考官の興味を引くようなエントリーシート、面接対策を行うことも大切だと思ったのですが、そもそも胸を張って学生時代頑張ったと言えることがなかったのです。
そこで元々IT業界に興味を持っていたこともあり、学生時代頑張ったことを作るための応用情報技術者受験を決めました。基本情報技術者ではなく応用情報技術者にしたのは「響きは応用の方が凄そう」ってだけでなく、午後問題で経営問題を選択できるので文系学生にとっては合格難易度がマシになるからです。
ちなみに応用情報技術者以外にもう1つ候補としていたのがTOEICでした。しかしリーディングは大学受験で培われたのでともかくとして、苦手なリスニングを克服する手立てがありませんでした。
夏休み~受験の10月までの約3か月間は就活をストップして応用情報技術者の勉強に全振りしました!
3ヶ月の勉強期間で何とか一発合格!成績は?
僕は平成30年の10月に受験しました。12月に合格発表があり、何とか合格していました。
1年以上前なので結果のスクリーンショットもどこかに消えてしまって正確な成績を把握してなくて申し訳ないのですが、
- 午前問題:80%
- 午後問題:60%ちょい
と午前問題は余裕を持てたのに対して午後問題はギリギリの戦いでした。
とにかく3ヶ月間が無駄にならずに済みました。
しかし就活ではそんなに役に立たなかった理由
①エンジニア/プログラマーになるのをやめたから
まず第一の理由がこれです。間違いなく営業よりはプログラマーの方が適正はあるのですが、毎日パソコンと向き合ってコーディングするのを想像すると続くイメージを持てなかったので所謂文系職に方向転換しました。
②成果として面接で伝えるのは難しいから
プログラマーになることをやめたので「未経験ながらプログラマー適正をアピール材料」としての意義は失われました。そして「学生時代頑張ったエピソード」として使うのも難しいことに後から気付きました。理由としては、
- 面接官に”そもそもどんな資格なのか”というところから説明しなければならない。
- 知らない人に”合格率〇%”と難易度を説明しても成果が伝わりにくい。
- 3ヶ月で合格したものを”学生時代に頑張ったこと”と胸を張って言えるのか怪しくなってきた。
ことがあります。
③人柄も伝わりにくいから
就活のとき即戦力となるようなすごい成果を持っている人は一部だと言われています。しかし「学生時代何もしてこなかったのは自分だけではないか」という不安があったので人物勝負という発想に中々至ることができませんでした。
今思えば応用情報技術者だけでなく”勉強”という活動自体が周りの人と関わらない無機質なものなので、人柄を伝えにくいという点でも資格試験はエピソードとして使いづらかったです。
就活で行き詰っても「資格に走るのが不正解」ということだけは言える
というわけで就職活動で行き詰って応用情報技術者を取得したものの大して役に立たなかったエピソードを書きました。
最後まで御覧いただきありがとうございました。