<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>技術ブログ &#124; 株式会社クラウディア &#187; 雑談</title>
	<atom:link href="https://cloudear.jp/blog/?cat=26&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://cloudear.jp/blog</link>
	<description>クラウド専門の業務システム・社内ツール開発</description>
	<lastBuildDate>Fri, 12 Nov 2021 05:00:35 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0.1</generator>
	<item>
		<title>Ruby モジュールと例外処理【応用編】</title>
		<link>https://cloudear.jp/blog/?p=2242</link>
		<comments>https://cloudear.jp/blog/?p=2242#comments</comments>
		<pubDate>Tue, 25 Oct 2016 11:42:39 +0000</pubDate>
		<dc:creator><![CDATA[yusuke]]></dc:creator>
				<category><![CDATA[雑談]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=2242</guid>
		<description><![CDATA[yusukeです。前回のRuby【初級編】の続きを書きたいと思います。 目次 クラス（クラスメソッドとクラス変数） 継承 モジュール 例外処理 前回はクラスを作り、インスタンスメソッドを使うところまでを記載しました。今回 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>yusukeです。前回のRuby【初級編】の続きを書きたいと思います。</p>
<p><span style="font-size: 18pt">目次</span></p>
<ol>
<li style="text-align: left"><span style="font-size: 14pt">クラス（クラスメソッドとクラス変数）</span></li>
<li style="text-align: left"><span style="font-size: 14pt">継承</span></li>
<li style="text-align: left"><span style="font-size: 14pt">モジュール</span></li>
<li style="text-align: left"><span style="font-size: 14pt"><span style="font-size: 14pt">例外処理</span></span></li>
</ol>
<p><span id="more-2242"></span></p>
<p>前回はクラスを作り、インスタンスメソッドを使うところまでを記載しました。今回はクラスメソッドの書き方から始めたいと思います。</p>
<p><span style="font-size: 24pt">1. クラスメソッドとクラス変数</span></p>
<pre class="theme:sublime-text lang:ruby decode:true" title="english_test.rb">class EnglishTest
#クラスメソッド
=begin
def クラス名(もしくはself).メソッド名
  実行したい処理
end
=end
  def EnglishTest.title(title)
    print title,"テストの点数を発表します。\n"
  end
end
#クラスメソッドの呼び出し
EnglishTest.title("英語")
</pre>
<p>クラスメソッドは、def クラス名(もしくはself).メソッド ~ endで表します。クラスメソッドを呼び出すには「クラス名.メソッド名」と書きます。</p>
<p>複数のクラスメソッドを纏める書き方もあります。</p>
<pre class="theme:sublime-text lang:ruby decode:true " title="english_test.rb">class EnglishTest
#発表した人数をカウント
  @@count=0

#初期化メソッド
  def initialize(name="Ruby",point=0)
    @name=name  
    @point=point
  end
#アクセスメソッド
  attr_reader :name,:point
  
#インスタンスメソッド
  def test
   @@count+=1
   print(@name,"さんの点数は",@point,"点\n") #()省略可
  end
 
#クラスメソッド
  class &lt;&lt; EnglishTest
    def title(title)
      print title,"テストの点数を発表します。\n"
    end

    def count
      @@count
    end
  end
end

#クラスメソッドの呼び出し
EnglishTest.title("英語")

#オブジェクトの生成
ruby=EnglishTest.new
tanaka=EnglishTest.new("田中",60)
takahashi=EnglishTest.new("高橋",80)
#メソッド呼び出し
ruby.test
tanaka.test
takahashi.test
#クラス変数の呼び出し
puts EnglishTest.count,"人の点数を発表しました。\n"</pre>
<p>クラスメソッドを複数書く場合はclass &lt;&lt; EnglishTest ~ endの中に書きます。インスタンスメソッドと同じような書き方ができ、わかりやすくなります。</p>
<p>@@で始まる変数はクラス変数と呼ばれるものです。このクラスのすべてのインスタンスで共有できる変数です。クラス変数を参照するには自分でアクセスメソッドを用意しなければいけません。上記ではtestメソッドが呼び出される回数を記録しています。</p>
<p>以下は実行結果です。</p>
<pre class="theme:terminal lang:default decode:true " title="実行結果">英語テストの点数を発表します。
Rubyさんの点数は0点
田中さんの点数は60点
高橋さんの点数は80点
3
人の点数を発表しました。</pre>
<p>&nbsp;</p>
<p><span style="font-size: 24pt">２. 継承</span></p>
<pre class="theme:sublime-text lang:ruby decode:true" title="human.rb">class Human
  def initialize(name="you")
    @name=name
  end

  def morning
    print "おはよう\n"
  end

  def hello
    print "こんにちは, ", @name,"さん\n"
  end 
end

#継承の構文
#class クラス名 &lt; スーパークラス ~ end
class John &lt; Human
  def morning
    print "Goodmorning\n"
  end
  
　　def bye
　　　　　print "Goodbye\n"
 end
end

john=John.new("John")
john.morning
john.hello
john.bye</pre>
<p>スーパクラスがHuman,サブクラスがJohnになります。スーパークラスのmorningメソッドをサブクラスのmorningメソッドでオーバーライド（上書き）し、サブクラスで新しいbyeメソッドを追加しています。スーパークラスのinitializeとhelloメソッドはサブクラスには記載されていませんが、継承されているので、呼び出すことができます。</p>
<pre class="theme:terminal lang:default decode:true" title="実行結果">Goodmorning
こんにちは, Johnさん
Goodbye</pre>
<p>&nbsp;</p>
<p><span style="font-size: 24pt">３. モジュール</span></p>
<p>モジュールはクラスと書き方が似ていますが、クラスと違いインスタンスを持つことができません。また継承もできません。処理だけを纏める機能を持ちます。以下のように記載します。</p>
<pre class="theme:sublime-text lang:ruby decode:true" title="math.rb">#モジュール作成
=begin
構文
module モジュール名
  モジュールの定義
end
=end

module AbcModule
 Number="1.0"  #定数

 def hello(name)
 print name,"さん、こんにちは\n"
 end 
#モジュール関数として登録
 module_function :hello
end

p AbcModule::Number
AbcModule.hello("John")

include AbcModule
p Number
hello("Sara")
</pre>
<p>モジュールは「モジュール名.メソッド名」という形で参照できます。これをモジュール関数といいます。注意しなければいけないのは、モジュール関数を定義しただけでは、モジュール名.メソッド名で呼び出せません。module_functionでモジュール関数を外部に公開して呼び出せるようになります。</p>
<p>モジュールをincludeすることによって、モジュール名を省略することができます。</p>
<pre class="theme:terminal lang:default decode:true" title="実行結果">"1.0"
Jognさん、こんにちは
"1.0"
Saraさん、こんにちは</pre>
<p>モジュールをクラスにインクルードすることを「Mix-in」とよびます。モジュール内のメソッドなどをクラスに取り込むことができます。</p>
<pre class="theme:sublime-text lang:ruby decode:true" title="module.rb">module AbcModule
  #Class1とClass２で共通のメソッドをまとめる
end

class Class1
  include AbcModule
  #固有のメソッドを記載
end

class Class2
  include AbcModule
  #固有のメソッドを記載
end</pre>
<p><span style="font-size: 14pt"> </span></p>
<p><span style="font-size: 24pt">４. 例外処理</span></p>
<p>プログラム実行で起きるエラーは以下のものがあります。</p>
<ul>
<li>データのエラー</li>
<li>システムのエラー</li>
<li>プログラムのエラー</li>
</ul>
<p>例外処理はこのようなエラーが発生した際に、実行されます。今回はraiseメソッドを使って、自分で例外を発生させます。</p>
<pre class="theme:sublime-text lang:ruby decode:true " title="error_test.rb">class ErrorTest
=begin
  begin
    例外が発生するかもしれない処理
  rescue
    例外が発生した際の処理
  end
=end  
  def initialize(name)
    @name=name
  end
 
  def hello
    begin
      raise
      print @name,"\n"
    rescue
      print "エラーが発生しました。\n"
    end
  end  
end

john=ErrorTest.new("John")
john.hello</pre>
<p>&nbsp;</p>
<p>例外処理は、begin~rescue~endを使います。beginに例外が発生するかもしれない処理を書き、rescueに例外が発生した際の処理を書きます。</p>
<p>上記では例外が発生するかもしれない処理の中でまずraiseメソッドが呼ばれ、その後printメソッドが呼ばれています。しかしraiseメソッドは例外を起こすメソッドなので、このメソッドが呼ばれた時点でrescueに処理が移ります。処理が移ったので、rescue側のprintメソッドが呼ばれ、以下が実行結果として出力されます。</p>
<pre class="theme:terminal lang:default decode:true" title="実行結果">エラーが発生しました。
</pre>
<p>&nbsp;</p>
<p>早足でRubyを紹介してきましたが、いかがでしたでしょうか？<br />
Rubyが気になった方は是非、開発環境を整えて、コードを書いてみてください。<br />
次回はRubyのフレームワークであるRailsの紹介をしたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=2242</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>依存性注入（DIコンテナ）について</title>
		<link>https://cloudear.jp/blog/?p=1247</link>
		<comments>https://cloudear.jp/blog/?p=1247#comments</comments>
		<pubDate>Sun, 07 Jun 2015 13:12:34 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[雑談]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1247</guid>
		<description><![CDATA[みなさんこんにちは、masa です。今日は Spring Framework などでお馴染みの依存性注入（DI）コンテナについて解説してみたいと思います。今回の記事は、オブジェクト指向でプログラムを書いている方向けとなり [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは、masa です。今日は Spring Framework などでお馴染みの<strong>依存性注入（DI）コンテナ</strong>について解説してみたいと思います。今回の記事は、オブジェクト指向でプログラムを書いている方向けとなります。</p>
<p><span id="more-1247"></span></p>
<p>依存性注入 = Dependency Injection とはなんぞや？という方のためになるべく簡単にその解説を書いてみたいと思います。</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>依存性注入（DI）ってむずかしい言葉いったいなんですか？</strong></span></p>
<p>継続的インテグレーション（CI）もそうですが、日本語に直訳してしまうと、とてつもなくわかりづらいワードになってしまうものがあります。この DI もそうです。</p>
<p>私も初めて Spring を触ったときはこのワードに惑わされた感がありました。だからブログにネタを書くときは絶対に人にわかりやすいように書きたいと思ったものです。依存性注入というのをわかりやすくいうと</p>
<p>&nbsp;</p>
<p><span style="color: #ff338f;"><strong><span style="font-size: 18pt;">クラス同士を疎結合にして、実データは外部へ出しちゃいましょう</span></strong></span></p>
<p>&nbsp;</p>
<p>ということです。いったいなんのために？</p>
<p>&nbsp;</p>
<p><span style="color: #3366ff; font-size: 18pt;"><b>クラスの単体テストをしやすくするためです</b></span></p>
<p>&nbsp;</p>
<p>下の図のようにクラスAの中でクラスBを呼び出している場合、クラスAがクラスBに<strong>依存している</strong>といいます。この場合、クラスAができあがって単体テストを行いたくても、クラスBが出来ていないとそれができません。</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/06/di1.png"><img class="alignnone size-full wp-image-1260" src="https://cloudear.jp/blog/wp-content/uploads/2015/06/di1.png" alt="di1" width="600" height="400" /></a></p>
<p>&nbsp;</p>
<p>では DIコンテナを使った場合はどうなるのでしょうか。下の図を見てみてください。</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/06/di2.png"><img class="alignnone size-full wp-image-1261" src="https://cloudear.jp/blog/wp-content/uploads/2015/06/di2.png" alt="di2" width="600" height="400" /></a></p>
<p>クラスAはインターフェースXを呼び出しているだけなので、クラスBが出来ていなくても単体テストができます。そう、インターフェースXがモックの代わりになり、実データ（＝リテラル）をクラスBに外出ししているのです。</p>
<p>昔の Spring では実データを XML ファイルに書いていましたが、&#8221;脱XML&#8221;のトレンドからすれば今は上記のようにインターフェースをかませる方法がスマートと言えるでしょう。もちろん現行の Spring でも XML で設定することは可能です。</p>
<p>単体テストがかんたんにできる以外にもメリットはあります。上図の中で、インターフェースXが検索するパッケージ場所を設定ファイル（これはXML）で管理するのですが、その検索するパッケージを書き換えれば、インターフェースXのデータを本番用の&#8221;クラスC&#8221;に一瞬で切り替えることが可能です。</p>
<p>ちなみにこの DI機能は、JUnit でも使えるので、テスト駆動開発の場合でも導入できると思います。</p>
<p>&nbsp;</p>
<p>いかがでしたか？今日は理解の難しい DI コンテナについて取り上げてみました。DI のデメリットとしてインターフェース数が増えることや、そもそも現場の学習コストの問題もあります。使えば必ずしも品質や納期が改善されるわけではないのでメリット・デメリットを天秤にかけて導入を検討してみてください。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1247</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>コピーレフトライセンスについて考察</title>
		<link>https://cloudear.jp/blog/?p=896</link>
		<comments>https://cloudear.jp/blog/?p=896#comments</comments>
		<pubDate>Sun, 15 Mar 2015 14:04:40 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[プログラム]]></category>
		<category><![CDATA[雑談]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=896</guid>
		<description><![CDATA[みなさんこんにちは、 masa です。今日は、私たちが普段から無意識のうちに使っているオープンソースソフトウェアのライセンス について取り上げたいと思います。とくにコピーレフトという性質をもつ GPL (GNU Gene [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは、 masa です。今日は、私たちが普段から無意識のうちに使っているオープンソースソフトウェアのライセンス について取り上げたいと思います。とくにコピーレフトという性質をもつ GPL (GNU General Public License) は商用利用で気をつけるべきことがあったりします。</p>
<p><span id="more-896"></span></p>
<p>いまや星の数ほどあるオープンソースソフトウェア（以下 OSS）ですが、私たちの仕事にあまりに無意識に入り込んでいるため、ライセンスについてはあまり考えずに使ってしまうこともしばしば。OSS のライセンスが複雑化していることも原因と考えられます。今日はそんな OSS のライセンスについて商用利用という観点から再考するために改めて書きとめておきたいと思います。</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 18.6666660308838px;">　<strong>そもそもオープンソースって無料でしょ？</strong></span></p>
<p>OSS は<strong>無料で使える</strong>のは確かです。しかし <strong>負う義務</strong>はライセンスにより様々なのです。</p>
<p>無料だからといって何してもOKというわけではありません。</p>
<p>数あるライセンスの中で一番神経を使うのが GPL のように<strong>コピーレフト（後述）</strong>であるライセンスです。GPL は商用利用において企業が神経をとがらせ、また敬遠するものであったりもします。</p>
<p><span style="color: #5257ff;"><strong>非コピーレフト<br />
</strong></span>MITライセンス, Apacheライセンス, BSDライセンスなど</p>
<p><span style="color: #ff5c5c;"><strong>コピーレフト<br />
</strong></span>GPL, LGPL , AGPL, CPL など</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 18.6666660308838px;">　<strong>コピーレフトかどうかが運命の分かれ道</strong></span></p>
<p>コピーレフトというのは簡単に言えば</p>
<p><strong><span style="font-size: 12pt; color: #f7459e;">「あんた、コピーレフトの OSS を使ってソフトウェア作ったんやな？なら、あんたのソフトウェアも配布した人にソースコード公開せなアカンよ？」</span></strong></p>
<p>というものです。</p>
<p>例えば、GPL ライセンスのライブラリを使って業務アプリケーションを完成させたとします。するとその業務アプリケーションは GPL ライセンスとなりますので、配布先であるクライアントに業務アプリケーションのソースコードを公開する義務を負います。</p>
<p>これが GPL ウイルスとも言われる理由ですね。</p>
<p>なんだその暴挙は！と思われるかもしれませんが、これにはちゃんと理由があります。GPL の哲学として「オープンソースソフトウェアを独占させず、より広くオープンソースソフトウェアを発展させたい」というものがあります。その想い通り、GPL ライセンスのソフトウェアというのは爆発的に広まっていきました。</p>
<p>しかし、最近はこの扱いにくい性質から非コピーレフトの MITライセンスや Apacheライセンスなどが好まれる傾向が強くなってきたのも事実です。非コピーレフトライセンスの場合、<strong>成果物のソースコードを公開する義務はありません。</strong></p>
<p>少し前、PHP フレームワーク <strong>CodeIgniter</strong> がコピーレフトライセンスを採用すると発表。多くのユーザーが不満を抱き、 FuelPHP へ流れるといったことがありました。その後いざこざがありつつも結局、CodeIgniter3.0 は非コピーレフトである MITライセンスを採用することとなったのです。</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 18.6666660308838px;">　<strong>コピーレフトは商用利用には使えない？よくある勘違い</strong></span></p>
<p>答えはノーです。</p>
<p>具体例を挙げると、コミュニティバージョンの MySQL は GPL ライセンスなので無料ですが、MySQL を使うソフトウェアを作れば GPL を継承することになります。依頼元のクライアントにソースコードを求められたらクライアントにさえソースコードを渡せばいいので、きちんと説明すれば GPL ソフトウェアを使うことも許されるでしょう。</p>
<p><span style="color: #f7459e;"><strong><span style="font-size: 14pt;">Webサービスだったらユーザー全員にソースコード公開しなくちゃいけないのでは？</span></strong></span></p>
<p>答えはノーです。</p>
<p>ソースコードを公開する義務があるのは<strong>ソフトウェア自体の配布先</strong>に対してのみです。WebサービスのユーザーはたしかにWebサービスを利用していますが、ソフトウェアはサーバーにしかなく、ユーザーにソフトウェアを配布しているわけではないからです。</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 18.6666660308838px;">　<strong>もしライセンス違反したらどうなっちゃうの？</strong></span></p>
<p>アメリカでは GPL ライセンス違反を犯した会社が訴訟を受ける事例がありました。日本ではまだ訴訟の事例はないようですが、国内大手の会社が Linux の GPL 違反を犯して、ユーザーから非難を浴び、修正したという事例があります。日本ではまだ訴訟のケースがないからいいや、ということにはなりません。事前に OSS の採用を綿密に考え、万が一、意図せずに違反してしまった場合は速やかに企業として対応する体制が必要です。企業の信頼は失ってからではもう遅いとすら言えます。</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 18.6666660308838px;"><b>　おまけ：　私の周りのライセンスを調べてみた</b></span></p>
<p>最後に、私がよく使うソフトウェアやライブラリをざっくりまとめてみました。</p>
<p>・AngularJS （MIT License）</p>
<p>・Spring Framework （Apache License 2.0）</p>
<p>・MyBatis (Apache License 2.0)</p>
<p>・Tomcat (Apache License 2.0)</p>
<p>・Jenkins (MIT License)</p>
<p>・FuelPHP (MIT License)</p>
<p>・jQuery (MIT License)</p>
<p>・MySQL (GPL)</p>
<p>・Redis (BSD License )</p>
<p>・Apache HTTP SERVER (Apache License 2.0)</p>
<p>・NGINX (BSD like)</p>
<p>・Varnish Cache (BSD licence)</p>
<p>&nbsp;</p>
<p>いかがでしたか？今日は私たちが普段から使っている OSS についてもう一度その足元を確認するために、ライセンスについて確認してみました。<br />
オープンソースの力は偉大で私たちも多くの恩恵を受けてきたのは事実です。その反面、なかなかそのコミュニティの想いや哲学を知る機会はありません。今回は私自身にとって大変良い学びになりました。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=896</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>シングルページアプリケーション考察</title>
		<link>https://cloudear.jp/blog/?p=590</link>
		<comments>https://cloudear.jp/blog/?p=590#comments</comments>
		<pubDate>Sun, 01 Feb 2015 02:52:27 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[フロントエンド]]></category>
		<category><![CDATA[雑談]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=590</guid>
		<description><![CDATA[みなさんこんにちは、masa です。今日はコードは出てきませんｗ　たまには Web 業界の考察を書いてみたいと思いテーマを考えた結果、シングルページアプリケーション（以下、ＳＰＡ）について述べてみたいと思います。 突然で [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは、masa です。今日はコードは出てきませんｗ　たまには Web 業界の考察を書いてみたいと思いテーマを考えた結果、シングルページアプリケーション（以下、ＳＰＡ）について述べてみたいと思います。<br />
<span id="more-590"></span></p>
<p>突然ですが、私は今後すべての Web はシングルページ化していくと予想しており、またそうなるべきだと思っています。</p>
<p>今さらですが、従来の Web アプリケーションというと、サーバーサイドで生成したページをクライアント（ブラウザ）に投げつけ、あとはブラウザがそれを表示するだけでした。データに更新があればサーバー側でページを更新してブラウザはそのデータをもう一度読み込み直す。これがサーバー同期通信です。</p>
<p>これには一つ、画面のユーザビリティに大きな欠点がありました。何か操作するためにページ更新が起きるため画面がチラついて「待ち」が発生する。これではユーザーに強いストレスを与え、インストール型アプリより確実に&#8221;劣った&#8221;コンテンツとなってしまう。</p>
<p>ＢｔｏＣ の Web サービスでは ＳＰＡ が増えてきていますが、<span style="color: #2f91fa;"><span style="color: #ff00ff;">私がメインとする業務系も ＳＰＡ 化していくことが目標の一つであったりします。</span><br />
</span><br />
<span class="hcss1">　<strong><span style="font-size: 12pt;">フロントエンドを&#8221;厚く&#8221;するメリット・デメリットとは？</span></strong></span></p>
<p><strong>メリット</strong><br />
サーバーサイドとフロントエンド双方のやることが住み分けできて処理がスッキリします。サーバーサイドはデータベース処理とコンテンツの置き場に徹して、コンテンツの組み立てをフロントエンドに寄せます。サーバーサイドで&#8221;がんばる&#8221;ことを絞り込むことでインフラ設計も立てやすくなります。データ処理とコンテンツの分離ですね。</p>
<p>もうひとつ、同じような html ファイルを量産しなくて済みます。がんばってヘッダやフッタを部品化しても、結局 html ファイル数は増えてしまいますよね。一般的な ＳＰＡ ならヘッダ、サイドバー、フッターが固定で、メインコンテンツだけ Ajax で書き換えていけばいいので html コーディング量がグッと減ります。</p>
<p>双方のインターフェースについても心配はいりません。今時のサーバーサイドフレームワークには REST コントローラーが実装されていますので、簡単に JSON などの APIインターフェースが作れます。そしてフロントエンドの JavaScript と JSON等 でデータのやりとりを行うわけです。</p>
<p><strong>デメリット</strong><br />
クライアント側の処理が重くなります。サーバーから JSON でデータをクライアントに投げた後は、コンテンツ処理はすべてクライアントがやります。ＳＰＡ の場合は常に処理が走りますのでその点をケアする必要があります。もうひとつ、ブラウザが古いとせっかく作ったクールな ＳＰＡ も正常に動かない可能性があります。私が「業務系も ＳＰＡ 化していくことが目標」と書いたのはこれが理由です。どんなに優れた UI/UX を作りたくても</p>
<p><span style="font-size: 12pt; color: #ff0000;">「あーうちの会社、 PC 古いんで昔の IE でも動くようなやつお願いしますね」</span></p>
<p>Web系の人なら一度は食らうであろう「古いIE砲」には敵わないのである (;ﾟдﾟ)</p>
<p>&nbsp;</p>
<p><span class="hcss1">　<strong><span style="font-size: 12pt;">最近気になるフロントエンド技術について<br />
</span></strong></span><br />
最近 <span style="color: #ff3333;">AngularJS</span> を使い始めました。Google のアレです。これをつかって Ajax すれば大抵の ＳＰＡ は作れると思います(｀･д･´)<br />
特にフォームからユーザー入力を input で受け取ってリアルタイム表示するモデル機能、js 内にデータを入れて、リアルタイムに絞りこみ検索できるコントローラー機能は強力です。データを表示する際のフィルター機能も充実していてコンテンツ作りが楽しい。フレームワーク依存症になりそうで怖いですｗ</p>
<p>その他気になるもの<br />
・データをグラフィカルに見える化する D3.js<br />
・Ajax と違いサーバープッシュできる WebSocket</p>
<p>いかがでしたか？今日は雑多な考察ブログでした。<br />
次回は最近よく聞く CSS の開発手法について書いてみたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=590</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
