文系エンジニアの学習日記

プログラミング未経験からIT業界に飛び込んだエンジニアの勉強日記

RSSを追加してみる

★Contents
RSSの定義
RSSはどのように使われてきたか(RSSリーダーの盛衰)
RSS取得方法

RSSの定義と変遷

RSSの定義を簡単にすると、webサイトの情報を効率よく収集できるXMLベースのフォーマットのことを言います。
正確な意味は下記のURLが詳しいです。

RSSで記述された文書には、下記のようなことを記述しています。

・Webサイトの各ページのタイトル
・Webサイトの各ページのアドレス
・Webサイトの各ページの見出し
・Webサイトの各ページの要約
・Webサイトの各ページの更新時刻

これらが書いてあることでwebサイトの更新情報を効率的に把握することができます。

RSSはどのように使われてきたか(RSSリーダーの盛衰)

先ほどの記事でRSSの定義をしましたが、これはどのような用途で利用されてきたのでしょう。
主に、RSSリーダーというソフトウェアの中で使われてきました。

しかし、このRSSリーダーというサービスは現在あまり使われていないというのが現状です。
それに関する記事があって読んでみました。その内容と、?と思ったことについて書いてみます。

そのことについて一旦目次を用意します。

・RSSリーダーの現在
・RSSリーダーが衰退した理由とその理由に対する個人的な所感


RSSリーダーの現在
上記記事で使われているGoogleトレンドによると2005年~2006年をピークに右肩下がりで2018年には、ピーク時の1~4%しか人気がありません。
また、主要なRSSリーダーソフトウェアは2013年のGoogleリーダーのサービス終了でほとんど使われなくなっています。
本当にRSSリーダーは衰退しているのか、今、どのぐらいの主要サイトにRSSリーダーが実装されているのか調べてみました。

RSSリーダーが実装されているブラウザ 
Internet Explorer11 
RSSリーダーが実装されていないブラウザ
MicrosoftEdge
Googlechrome
Safari(MacOS版)

実装されていないブラウザが多数を占めています。


RSSリーダーが衰退した理由とその理由に対する個人的な所感

理由としては、SNSやキュレーションサイトの普及があげられます。
しかし、SNSが普及することと、RSSリーダーが衰退することは相関関係があるのでしょうか。
大まかには同じ物ではありますが、使われ方としては微妙に異なるとおもっていたので、どうして相関関係があるのか実際に調べてみました。
そのため、また、Googleトレンドを見てみましょう。

グラフで見ると、2014年頃はピーク時と比較して25%の人気しかありません。
この時、Facebookが日本でのシェア率が最も高いSNSになったというのと大きく関連していそうです。
そう思う理由として、両者は、お気に入りの記事の更新を確認するという意図で使うとしたら同じ用途で使われているといえるからです。

例えば、Facebookでお気に入りのアカウント、コンテンツを「いいね!」したり、フォローしたりすることでお気に入りの情報をタイムリーに取得することができます。
RSSリーダーもお気に入りのサイトを登録しておくことで、そのサイトの更新情報をタイムリーに取得するものでした。

また、NEVERまとめやグノシーなどキュレーションサイトの普及によって自分の興味のあるジャンルに対するタイムリーな情報が取得できるようになったことも理由としてあげられています。
ただ、それだけで、RSSリーダーが衰退したのか?と思ったため、どういうことだろうと考えてみました。

RSSリーダーで情報を集めるとなると、自分でそのサイトを登録する必要があります。しかし、キュレーションサイトでは、サイトがジャンルに分けて情報を集め、体系化しているため、自分で登録する必要がなくなるのです。
つまり、自分で登録する手間がなくなったから、その分普及したということができそうです。

しかし、キュレーションサイトが集めて体系化した情報は、あくまでも、キュレーションサイトの意図に過ぎないと考えられます。

また、キュレーションサイトがやっている記事をまとめて、掲載するという行為は、、ユーザーからもサイトの信頼性が担保できないという声が上がったりと客観的な視点でも問題を抱えているといえそうです。
ただ、そのようなことを書いている媒体も実はキュレーションサイトだったりしますからね。そこで言いますか?という話です。とはいえ、キュレーションサイトの運営側がキュレーションして取得した情報に対して付加価値をつけているのであれば、そのサイトは存在価値があるものということができそうです。
そもそも、キュレーションサイトの問題点に関する話は鼬ごっこにしかならないから論じる意味はないと思っています。正直、サイトを見る側の意識次第の話ですし。

一旦話を戻します。

キュレーションサイトの登場と、RSSリーダーの衰退に相関関係があるのかという話でした。

私個人の意見ですが、両者の違いとして、自分の意志でサイトを登録して閲覧するか、登録されているものを受動的に閲覧するのかという話であると思っています。RSSリーダーは自分の中でお気に入りのサイトを登録することにより、自分でサイトを選ぶという行為をしています。
したがって、見るものを自分で選びたいという意思がある人にとって、RSSリーダーにはメリットがあるといえるのです。
自分で選んで登録する。という観点で違いが存在するため、この2つには相関関係は存在しないと個人的には思っています。


RSS取得方法

ここまでの記事では、RSSなんてもう使わないのでは?という考え方もできそうです。ただし、RSSに対して、データをURLを使って取得するという観点から取得方法に関しては、今後も使いそうな技術であるため、まだまだ使うこともありそうです。というわけで、取得方法についてです。
今回は、今自分が勉強しているNode.jsを使ったRSSの取得方法について紹介していきます。

取得するにあたって必要な道具は以下の通りです。

・ネットワークアクセス機能
・XMLデータをパースしてJavaScriptのオブジェクトにする機能

それでは、これらの機能を実装していきます。
1.Node.jsのアプリが格納されているディレクトリ内にXML2JSをインストールします。
インストールする際に利用するコマンドは下記の通り

npm install --save xml2js

2.ロードしたHTTPSモジュールを使ってサイトにアクセスします。

router.get('/',(req, res, next) => {
    var opt = {
        key: fs.readFileSync('key.pem'),
	    cert: fs.readFileSync('cert.pem'),
        host:'yume100kairi.hatenablog.com',
        port:443,
        path: '/rss'
    };
    console.log('opt:', opt);
    http.get(opt, (res2) => {
        var body = '';
        res2.on('data', (data) => {     
            body += data;
        });
    console.log('body:', body);
    res2.on('end', () => {
        parseString(body.trim(), (err, result) => {
            var data = {
                title: 'hello!',
                content: result.rss.channel[0].item
            };
        res.render('hello', data);
        });
    })
});

このコードで何やっているの?ということについて説明していきます。
変数optに格納している中身についてここで説明します。

host :アクセスするホスト、ドメイン

アクセスするサイトのコンピューター名、ネットワーク名をここに記述します。

後述するpathと混同してしまいアクセスができないというエラーを発生させてしまったため、違いについて理解しておきたいところです。

port :ポート番号を書きます。HTTPSアクセスでは、443を使います。

pathドメイン以降の部分

.com以降の部分になります。


サイトアクセスが完了したら、レスポンスオブジェクトにデータ取得した時のイベントを設定します。
この中では、変数データの中身をbodyに格納しています。

次に実行するイベントは、XMLデータのパースです。
parseString関数の第1引数にてXMLのテキストデータを指定し、第2引数では、すべてのパース処理が終了した後で呼び出すコールバック関数を用意します。

コールバック関数内では、取得したXMLデータを画面上に表示する処理を行っています。
私が実行したときはこのように記述したまま実行できてしまったのですが、下記の部分でなにをやっているのかあいまい状態なので

content: result.rss.channel[0].item

上記について調べておきたい所存。(たぶんだが、コールバック関数の引数として使っているresultオブジェクト内にあるrssオブジェクトを使って、画面出力用のデータを設定しているのであろうと予想)

3.2.で取得したデータを画面に表示します。

下記のようにHTMLを記述します。

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta http-equiv="content-type"
    content="text/html"; charset="UTF-8">
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>

<body>
    <head>
        <h1><%= title %></h1>
    </head>
    <div role="main">
        <% if (content != null){ %>
            <ol>
        <% for(var i in content) { %>
        <% var obj = content[i]; %>
        <li><a href="<%=obj.link %>">
            <%= obj.title %></a></li>
        </tr>
        <% } %>
        </ol>
       <% } %>
       </div>
</body>
</html>

肝となる部分は、

    <div role="main">
        <% if (content != null){ %>
            <ol>
        <% for(var i in content) { %>
        <% var obj = content[i]; %>
        <li><a href="<%=obj.link %>">
            <%= obj.title %></a></li>
        </tr>
        <% } %>
        </ol>
       <% } %>
       </div>

for文を使って、contentの要素をobjに格納し、obj内のlink、titleを使って、取得したRSSデータのリンクとタイトルを表示しています。


終わりに

今回はRSSデータを例にして、webサイト上のデータを取得する方法について紹介しました。今回紹介した方法は、あくまでもNode.jsのアプリケーション作成時に使用する方法ですので、他の言語を使った方法があったら、紹介しようかと思います。

生身のNode.jsを使ったフォーム送信

※attention!!
このブログは学習日記というタイトル通り、個人の備忘録です。間違っていたらコメント欄でいろいろお申し付けください。
極力回答いたします。

前回の更新の続きとして、生身のNode.jsを使ったフォーム送信方法について紹介します。

★Contents
・expressを使ったフォーム送信
・生身のNode.jsを使ったフォーム送信
・両者の違い
・なぜ生身から先にやったほうがいいの?

続きを読む

Node.jsの欠点(アプリケーションを作成するうえで)と解決策

※attention!!
このブログは学習日記というタイトル通り、個人の備忘録です。間違っていたらコメント欄でいろいろお申し付けください。
極力回答いたします。

 

前回の更新では生のNode.jsを使ったチュートリアルを行いました。
これでもアプリケーションは構築できますが、さらに便利な機能が存在します。

まだあるの?と思うかもしれません。
しかし、このような機能ができた理由もちゃんと存在しています。
今回は、その理由について、書こうと思います。


★Contents

・Node.jsの課題、
・それを克服するためのFW
・expressを使ったアプリ作成の手順

続きを読む

ドメイン駆動設計とSpringBootの話

先日、JJUG CCCというJavaのイベントに参加しました。

詳細のURL↓

www.java-users.jp

 

数多くのセッションの中で、過去の仕事経験を思い起こすような内容のものがありました。

ドメイン駆動設計とSpringBootを使ったJavaアプリケーション開発
詳細についてのURL↓

下記のURLをクリックして、セッション一覧のボタンを押下するとセッション一覧画面に飛びます。

www.java-users.jp

スピーカーは、現在yahoo!で働いている2年目のエンジニアの方でした。

早速内容に入りたいところですが、、、

 

タイトルからよくわからない言葉がたくさん出てきているため、そもそも、ドメイン駆動設計、JavaのSpringBootってなんだ?という話を一旦して次のカテゴリ更新でイベントの内容について書いていきます。

ドメイン駆動設計について

・一言でいうと:ソフトウェアの設計手法のこと、
辞書的な意味としては、
「複雑なドメインの設計は、モデルベースで行うべき」であり、
また「大半のソフトウェアプロジェクトでは、システムを実装するための特定の技術ではなく、ドメインそのものとドメインのロジックに焦点を置くべき」であるとする

言い換えると、
「現実の複雑な問題解決領域をどの様にソフトウェアに落としこむか」というテーマのもと、組織、開発プロセス(どのような手順で作るか)、設計論(設計図を作る工程)に及ぶ
ソフトウェア開発哲学であり、その探求の過程で生まれたモデリングの戦略、戦術のパターン、思想が集まったものです。

ドメイン駆動設計について、もっとわかりやすく書かれた本が出ていますね。
オブジェクト指向でなぜ作るのか

 

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

 

 

タイトルは、オブジェクト指向でなぜ作るのかとなっておりますが、ドメイン駆動設計のこともある程度書かれています。
そもそも、オブジェクト指向が進化したものとして、ドメイン駆動設計があります。
だから、オブジェクト指向について知った後に、ドメイン駆動設計について学んでみるとその理解が、深まると思います。
この本、私も読んでみましたが、分かりやすかったです。文章力のある人すごい......!!の一言に尽きる。

技術について知らない人がそれを理解でき、そして、それによって次の技術について興味を持てるような内容の技術書は付加価値が本当に高いです。

JavaのSpringBootについて

・まずJavaから
一言でいうと:たくさんあるプログラミング言語のうちの一つ
プログラミング言語とは、コンピューターの世界の言葉と、人間の世界の言葉を橋渡しするための言語です。
端的に言ってしまうと、コンピューター内の世界で使われている言語のことですね。

このような言葉を使って、コンピューターは動いています。

・SpringBootについて
一言でいうと:Spring Frameworkベースのアプリケーションを手軽に作成することができるフレームワークです。

またまた、Spring Frameworkとか、フレームワークとかよくわからない言葉が出てきましたが、下にその意味をざっと書いておきます。

フレームワーク:ソフトウェアの分野では、ある領域のソフトウェアに必要とされる汎用的な機能や基本的な制御構造をまとめた半完成品のこと
詳しくは、こちらのサイトに載っています。

e-words.jp

Spring Framework:上記で書いたフレームワークのうちの一つ。
調べてみると山のように情報が出てきます。

最後にこれらについて学ぶときに私が使った本について簡単に紹介しておきます。
※あくまでも個人の感想です。

 

続きを読む

挨拶と学習記録1

 

初めまして。

ブログをはじめました。

ここには簡単な学習記録を残していきます。

詳細についてはまた後日、として

本日の学習内容を記録していきます。

やったことはNode.jsについて、

botを作成するときに使うと聞いたため、簡単なものを作ってみよう、まずは基本的なところから学習してみようと思いNode.js始めてみました。

 

続きは追記から

続きを読む