<?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; masa</title>
	<atom:link href="https://cloudear.jp/blog/?author=1&#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>Thymeleafの「xml.sax.SAXException」を回避する方法</title>
		<link>https://cloudear.jp/blog/?p=1719</link>
		<comments>https://cloudear.jp/blog/?p=1719#comments</comments>
		<pubDate>Wed, 30 Sep 2015 01:05:59 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[フレームワーク]]></category>
		<category><![CDATA[フロントエンド]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1719</guid>
		<description><![CDATA[みなさんこんにちは masa です。Java のフレームワークは何かと Spring ばかり触っていますが、久しぶりにプロジェクトをやってみると忘れてしまってる事ばかり（汗 Spring をやっている方ならテンプレートエ [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは masa です。Java のフレームワークは何かと Spring ばかり触っていますが、久しぶりにプロジェクトをやってみると忘れてしまってる事ばかり（汗</p>
<p>Spring をやっている方ならテンプレートエンジンは Thymeleaf をお使いだと思いますが、以前ハマったポイントを記事に書き忘れていたので今回備忘録として残しておきます。</p>
<p><span id="more-1719"></span></p>
<p><span style="font-size: 12pt;"><strong>HTML を書き終わり、プロジェクトをビルドして画面を開こうとすると・・・エラーが発生</strong></span></p>
<pre class="theme:dark-terminal lang:default decode:true ">2015-09-29 22:47:58.030 ERROR 3372 --- [tp2117193231-14] o.thymeleaf.templateparser.ErrorHandler  : [THYMELEAF][qtp2117193231-14] Fatal error during parsing

org.xml.sax.SAXParseException: The element type "link" must be terminated by the matching end-tag "&lt;/link&gt;".
	at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
	at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
（以下スタックトレース）
</pre>
<p>&nbsp;</p>
<p><span style="font-size: 14pt; color: #ff0000;"><strong>Thymeleaf の HTML 解析は XMLチェックが走るため、閉じタグを省略したような書き方だと弾かれます。</strong></span></p>
<p>これをどうにかしないといつまでたっても画面自体が表示されません。今さら HTML を書き直すのはさすがに厳しいので以下の手順で回避しましょう。</p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt;"><strong>1．Thymeleaf のパース（構文解析）設定をゆるく変える</strong></span></p>
<p>Thymeleafの設定をクラスを使って変えることもできますが、今回は application.properties ファイルを作って設定を入れてみます。<br />
以下のように src/main/resources 直下に、空の application.properties ファイルを作ってください。</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/09/thl1.png"><img class="alignnone size-full wp-image-1721" src="https://cloudear.jp/blog/wp-content/uploads/2015/09/thl1.png" alt="thl1" width="406" height="526" /></a></p>
<p>&nbsp;</p>
<p>その中に以下の設定を書いて保存します。</p>
<pre class="theme:dark-terminal lang:default decode:true ">spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.cache=false
spring.thymeleaf.encoding=UTF-8</pre>
<p><strong>テンプレートモードを「LEGACYHTML5」へ変更してやることで HTML 解析がゆるくなります。<br />
ひきつづき次の手順2．に進んでください。</strong></p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt;"><strong>2．NekoHTML ライブラリを入れる</strong></span></p>
<p>今回 Maven から NekoHTML を入れる方法をご紹介します。ちなみに NekoHTML は HTMLパーサーです。<br />
ネコというネーミングが気になりますが・・・。</p>
<p>Maven の pom.xml に以下を追記</p>
<pre class="lang:default decode:true ">&lt;dependency&gt;
  &lt;groupId&gt;net.sourceforge.nekohtml&lt;/groupId&gt;
  &lt;artifactId&gt;nekohtml&lt;/artifactId&gt;
  &lt;version&gt;1.9.22&lt;/version&gt;
&lt;/dependency&gt;</pre>
<p>ライブラリを入れるために一度プロジェクトをビルドしてください。</p>
<p>&nbsp;</p>
<p>これで Thymeleaf のパーサーがゆるい設定に変わりますので、あとはいつもどおりプロジェクトを実行してください。パーサーチェックが通って画面が無事表示されるはずです。</p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt;"><strong>おまけ</strong></span></p>
<p>そういえば前にクラスから Thymeleaf の設定をしようとして書いたコードが残っていました。<br />
実行しても設定が変わらなかったのでどなたか解決策をご存知でしたら教えてくださいｗ</p>
<pre class="lang:default decode:true">@Configuration
public class ThymeleafConfig {
    @Bean
    public ThymeleafViewResolver thymeleafViewResolver() {
        ServletContextTemplateResolver servletContextTemplateResolver = new ServletContextTemplateResolver();
//        servletContextTemplateResolver.setPrefix("/webapp/templates/");
        servletContextTemplateResolver.setSuffix(".html");
        servletContextTemplateResolver.setTemplateMode("LEGACYHTML5");
        servletContextTemplateResolver.setCharacterEncoding("UTF-8");
        servletContextTemplateResolver.setCacheable(false);
 
        SpringTemplateEngine springTemplateEngine = new SpringTemplateEngine();
        springTemplateEngine.setTemplateResolver(servletContextTemplateResolver);
 
        ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
        thymeleafViewResolver.setCharacterEncoding("utf-8");
        thymeleafViewResolver.setTemplateEngine(springTemplateEngine);
 
        return thymeleafViewResolver;
    }
}</pre>
<p>&nbsp;</p>
<p>それでは今日はここまで。Thymeleaf使いの方の一助になれば幸いです。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1719</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>個人的によく使うVimテクニック5選</title>
		<link>https://cloudear.jp/blog/?p=1352</link>
		<comments>https://cloudear.jp/blog/?p=1352#comments</comments>
		<pubDate>Sun, 19 Jul 2015 13:22:07 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[インフラ]]></category>
		<category><![CDATA[エディタ]]></category>
		<category><![CDATA[プログラム]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1352</guid>
		<description><![CDATA[みなさんこんにちは masa です。今回はエディタネタの中でも Vim テクニックを取り上げてみたいと思います。普段、コンパイラ系の言語を書く場合は IDE を使いますが、それ以外の言語やシェルスクリプトを書く場合は V [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは masa です。今回はエディタネタの中でも Vim テクニックを取り上げてみたいと思います。普段、コンパイラ系の言語を書く場合は IDE を使いますが、それ以外の言語やシェルスクリプトを書く場合は Vim でちゃっちゃっとやることが多かったりします。</p>
<p><span id="more-1352"></span></p>
<p>今回はノーマルの Vim で使えるもので、個人的によく使うテクニックをご紹介。</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>　ここからここまでコピー or 切り取りしたい</strong></span></p>
<p>なんといっても一番使う行コピーと行切り取りです。いえいえ <strong>5yy</strong> とか<strong> 10dd</strong> とかじゃないですよ！</p>
<p>5行など行数が少なければ目測で 5yy とかできますが、コピーしたい行数が 127行だったりしたら大変ですね。<br />
あまり Vim に慣れていない方は :set nu で行数を表示して、コピーしたい行を引き算してヤンクするというのを見掛けます。<br />
これは効率が悪いですし、計算違いで関係ない行までコピー or 切り取りしてしまう可能性もあります。</p>
<p>そんなときは以下を使いましょう。</p>
<pre class="theme:dark-terminal lang:default decode:true ">ここは1行目ですよ。    //この行でmsと打つ
ここは2行目ですよ。 
ここは3行目ですよ。
ここは4行目ですよ。
（中略）
ここは126行目ですよ。
ここは127行目ですよ。  //この行でy'sもしくはd'sと打つ</pre>
<p>上の例ではコピーをしたい始めの行でmsと打ち、コピー終わりの行でy&#8217;sと打つと、1~127行がヤンクされます。（d&#8217;sだとヤンクではなく切り取りになります）</p>
<p>これだと始点と終点でコマンドを打つだけなので間違いもないし簡単ですね。知らなかった方はレッツトライ！</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>　大文字と小文字を切り替える or どちらかに統一する</strong></span></p>
<p>シェルスクリプトの変数や PHP の定数などは大文字で書くのが慣習ですが、そうなっていないものを直したりするときに使えます。</p>
<p>選択した文字を大文字⇔小文字にトグルさせる場合は~（チルダ）で、選択した文字をすべて小文字に統一したい場合はu（小文字）、大文字に統一したい場合はU（大文字）でできます。</p>
<pre class="theme:dark-terminal lang:default decode:true ">//まずは ctrl+v で対象文字を選択します

this is komoji   //左の文字すべてを選択した状態でUと打つと大文字へ変換されます

THIS IS OMOJI    //左の文字すべてを選択した状態でuと打つと大文字へ変換されます

ThIs Is KoNGoU   //左の文字すべてを選択した状態で~を打つとすべての大文字と小文字が反転します</pre>
<p>&nbsp;</p>
<p><strong><span class="hcss1" style="font-size: 14pt;">　一文字づつもしくは複数文字をリプレイスする</span></strong></p>
<p>わざわざ挿入モードに入らずに1文字だけ修正したいとか、この単語だけ修正したいとかあると思いますが、その際はコマンドモードで以下を実施してください。</p>
<pre class="theme:dark-terminal lang:default decode:true ">understanf   //fの上にカーソルを移動してr、そのまま変換したい文字(d)を入力

disk  //dの上にカーソルを移動してR、そのまま変換したい文字を打ち、最後にESC</pre>
<p>&nbsp;</p>
<p><strong><span class="hcss1" style="font-size: 18.6666660308838px;">　マクロを組んで同じ操作をワンキーで繰り返す</span></strong></p>
<p>なにやら難しい感じですが、めちゃくちゃ簡単です。 Vim では操作を記録して実行するマクロ機能がありますが、それを.（ドット）で繰り返すだけです。</p>
<pre class="theme:dark-terminal lang:default decode:true ">//qaと打ち記録を開始　qの後ろは任意の覚えやすい文字で結構です

This is Macro Test!  //左のように記録したい操作をやりきります　
    1234567          //今回は簡単ですが3行の文字入力をしました
  Test is End

//qと打ち記録を停止します

//@aと打つと1回マクロを実施しますが、.（ドット）だけでも実施できます。

This is Macro Test!
    1234567
  Test is End

//回数指定でマクロを実行したい場合は7@aと押すと7回実行できます</pre>
<p>上の例だとコピーしたほうが早いですが、複雑な操作を再実行したい場合はマクロのほうが良いですね。</p>
<p>&nbsp;</p>
<p><strong><span class="hcss1" style="font-size: 18.6666660308838px;">　大文字小文字に関係なく検索</span></strong></p>
<p>地味ですが検索時は必須ですね。わざわざ大文字で検索して、次に小文字で検索してとやっている人を見掛けました。検索文字列の後ろに\cとつけるだけでOKですw</p>
<pre class="theme:dark-terminal lang:default decode:true ">banana BaNANA Apple
Grape Banana ORANGE
orange PEAR peAR GRAPE

//（スラッシュ）を押して検索文字列banana\cと打つとすべてのバナナが引っ掛かります</pre>
<p>&nbsp;</p>
<p>いかがでしたか？今回はノーマルの Vim で使えるテクニックをご紹介しました。みなさんの作業効率を高める一助にしていただければ幸いです。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1352</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>デッドロックを回避するために</title>
		<link>https://cloudear.jp/blog/?p=1335</link>
		<comments>https://cloudear.jp/blog/?p=1335#comments</comments>
		<pubDate>Sun, 12 Jul 2015 11:42:05 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[インフラ]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[プログラム]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1335</guid>
		<description><![CDATA[みなさんこんにちは masa です。今日はデータベースにおいて致命的なバグであるデッドロックについて取り上げます。プログラマーや DBA な方以外にも聞いたことがあるワードなのではないでしょうか。 開発の流れにおいて、き [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは masa です。今日はデータベースにおいて致命的なバグであるデッドロックについて取り上げます。プログラマーや DBA な方以外にも聞いたことがあるワードなのではないでしょうか。</p>
<p><span id="more-1335"></span></p>
<p>開発の流れにおいて、きちんとトランザクション設計、リソースアクセス順序の設計がされていればデッドロックは理論上は発生しないはずなのですが、オープンソースのソフトウェア基盤なんかを使用している場合、世界中のエンジニアがバラで開発してる宿命というもあり、普通にデッドロックしたりしますｗ</p>
<p>デッドロックは同じタイミングでリソースを確保しにいった際に発生するものなので、リリースするまで発覚しなかったというケースもあります。</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>　そもそもデッドロックとは何なのかおさらい</strong></span></p>
<p>まずは問題ないアクセスについて図を描いてみましたのでみてみてください。トランザクション＝スレッドと捉えてもらっても構いません。</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/07/deadlock1.png"><img class="alignnone size-full wp-image-1337" src="https://cloudear.jp/blog/wp-content/uploads/2015/07/deadlock1.png" alt="deadlock1" width="600" height="400" /></a></p>
<p>（解説）上の図では各処理が同じ順番でテーブルへアクセスするため、仮に同タイミングで書き込みをしようとしてもどちらか遅れたほうが、相手の処理が終わる（＝ロック解放）のを待つだけです。</p>
<p>&nbsp;</p>
<p>では次は問題のある処理の図です。</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/07/deadlock2.png"><img class="alignnone size-full wp-image-1344" src="https://cloudear.jp/blog/wp-content/uploads/2015/07/deadlock2.png" alt="deadlock2" width="600" height="400" /></a></p>
<p>&nbsp;</p>
<p>（解説）上の図では各処理がテーブルへアクセスする順番が逆になっています。この場合にロックと次の処理が <strong>&#8220;たすき掛け&#8221; </strong>の状態になりますので、これ以上処理は進まず停止してしまいます。問題ない処理と決定的に違うのは、<strong>待ち時間が発生するのではなく、永久にストップするという点です。</strong></p>
<p>&nbsp;</p>
<p><strong><span class="hcss1" style="font-size: 14pt;">　どうすればデッドロックを無くせるのか？</span></strong></p>
<p>これは実は非常に難しい質問だと思います。デッドロックはバグそのものですので、ソフトウェアの規模が大きくなれば大きくなるほど潜在的に増えていきます。小さいシステムならまだしも、数百万ステップに及ぶプログラムにおいて、人間ですから設計図がまちがっているかもしれませんし、プログラマーがうっかり実装を手誤ってしまうかもしれません。</p>
<p>個人的にはデッドロックはゼロに近づける（＝減らす）努力はできても、完全にゼロにすることはほぼ不可能であるという立場にいます。ソフトウェアにおいてバグをゼロにすることは不可能であるという考えそのものですが、少しでもデッドロックが起きないように以下のことに気を付ける必要があります。</p>
<ol>
<li><span style="font-size: 12pt; color: #f55858;"><strong>トランザクションからアクセスするテーブルの順番を一貫する</strong></span></li>
<li><span style="font-size: 12pt; color: #f55858;"><strong>不必要にトランザクションを長くしない</strong></span></li>
<li><span style="font-size: 12pt; color: #f55858;"><strong>不必要に FOR UPDATE でロックを掛けない</strong></span></li>
<li><span style="font-size: 12pt; color: #f55858;"><strong>可能な限り行ロックする</strong></span></li>
</ol>
<p>以上のことに気を付けて設計、実装が出来れば限りなくデッドロックを排除できると考えます。</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>　それでもデッドロックが起きたときはどうすればいいのか</strong></span></p>
<p>これは実装でカバーしましょう。トランザクションの処理にタイムアウトもしくはリトライ回数を準備しておき、どちらかの処理がロックを解放するようにします。</p>
<p>&nbsp;</p>
<p>いかがでしたか？今日は発見が遅れがちなバグであるデッドロックについて取り上げました。あえて名前は挙げませんが世界的に有名なソフトウェアでもデッドロックは起きています。「デッドロック起こすのは初心者！」などとおごらずに慎重にプロジェクトを進めるよう常に意識したいものです。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1335</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>便利なCSSジェネレーターまとめ</title>
		<link>https://cloudear.jp/blog/?p=1313</link>
		<comments>https://cloudear.jp/blog/?p=1313#comments</comments>
		<pubDate>Sun, 05 Jul 2015 13:50:18 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[デザイン]]></category>
		<category><![CDATA[フロントエンド]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1313</guid>
		<description><![CDATA[みなさんこんにちは、masa です。今日は CSS を使って装飾する際に便利なジェネレーターをいくつかまとめてみました。 角丸やボタン作成などありますので、お役に立ててください。 　メニューボタンを作りたい CSS Me [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは、masa です。今日は CSS を使って装飾する際に便利なジェネレーターをいくつかまとめてみました。<br />
角丸やボタン作成などありますので、お役に立ててください。</p>
<p><span id="more-1313"></span></p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>　メニューボタンを作りたい</strong></span></p>
<p><a href="http://www.cssportal.com/css-menu-generator/" target="_blank"><span style="text-decoration: underline;">CSS Menu Generetor</span></a><a href="https://cloudear.jp/blog/wp-content/uploads/2015/07/cssg1.png"><br />
</a><img class="alignnone size-full wp-image-1314" src="https://cloudear.jp/blog/wp-content/uploads/2015/07/cssg1.png" alt="cssg1" width="787" height="412" /></p>
<p>&nbsp;</p>
<p><a href="http://www.cssmenubuilder.com/home" target="_blank"><span style="text-decoration: underline;">CSS Menu Builder</span></a><br />
<img class="alignnone size-full wp-image-1315" src="https://cloudear.jp/blog/wp-content/uploads/2015/07/cssg2.png" alt="cssg2" width="637" height="529" /></p>
<p><a href="http://css3button.net/" target="_blank"><span style="text-decoration: underline;">CSS3 Button Generator</span></a><br />
<img class="alignnone size-full wp-image-1319" src="https://cloudear.jp/blog/wp-content/uploads/2015/07/cssg6.png" alt="cssg6" width="649" height="454" /></p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>　グラデーションを作りたい</strong></span></p>
<p><a href="http://www.css3factory.com/linear-gradients/#remove" target="_blank"><span style="text-decoration: underline;">CSS Gradient Generator</span></a></p>
<p><img class="alignnone size-full wp-image-1316" src="https://cloudear.jp/blog/wp-content/uploads/2015/07/cssg3.png" alt="cssg3" width="670" height="541" /></p>
<p><a href="http://www.colorzilla.com/gradient-editor/" target="_blank"><span style="text-decoration: underline;">Ultimate CSS Gradient Generator</span></a></p>
<p><img class="alignnone size-full wp-image-1317" src="https://cloudear.jp/blog/wp-content/uploads/2015/07/cssg4.png" alt="cssg4" width="916" height="418" /></p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>　吹き出しボックスを作りたい</strong></span></p>
<p><a href="http://cssarrowplease.com/" target="_blank"><span style="text-decoration: underline;">CSS ARROW PLEASE</span></a></p>
<p><img class="alignnone size-full wp-image-1318" src="https://cloudear.jp/blog/wp-content/uploads/2015/07/cssg5.png" alt="cssg5" width="865" height="442" /></p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>　角丸を作りたい</strong></span></p>
<p><a href="http://border-radius.com/" target="_blank"><span style="text-decoration: underline;">CSS Border Radius Generator<br />
</span></a><br />
<img class="alignnone size-full wp-image-1320" src="https://cloudear.jp/blog/wp-content/uploads/2015/07/cssg7.png" alt="cssg7" width="784" height="550" /></p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>　フォームデザインを作りたい</strong></span></p>
<p><a href="http://livetools.uiparade.com/form-builder.html#" target="_blank"><span style="text-decoration: underline;">Live Tools &#8211; Form Builder<br />
</span></a><br />
<img class="alignnone size-full wp-image-1321" src="https://cloudear.jp/blog/wp-content/uploads/2015/07/cssg8.png" alt="cssg8" width="1042" height="721" /></p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>　いろいろまとめてやりたい</strong></span></p>
<p><a href="http://www.css3maker.com/" target="_blank"><span style="text-decoration: underline;">CSS3.0 Maker<br />
</span></a><br />
<a href="https://cloudear.jp/blog/wp-content/uploads/2015/07/cssg9.png"><img class="alignnone size-full wp-image-1322" src="https://cloudear.jp/blog/wp-content/uploads/2015/07/cssg9.png" alt="cssg9" width="1021" height="565" /></a></p>
<p>&nbsp;</p>
<p>いかがでしたか？今日は CSS デザイン時に使えるジェネレーターを独断と偏見で選んでみました。みなさんのデザイン制作の一助にしていただければ幸いです。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1313</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.htaccess でよくやる処理まとめ</title>
		<link>https://cloudear.jp/blog/?p=1304</link>
		<comments>https://cloudear.jp/blog/?p=1304#comments</comments>
		<pubDate>Sun, 28 Jun 2015 12:37:27 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[インフラ]]></category>
		<category><![CDATA[サーバー]]></category>
		<category><![CDATA[フロントエンド]]></category>
		<category><![CDATA[プログラム]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1304</guid>
		<description><![CDATA[みなさんこんにちは masa です。今日はサーバー側の話です。よく .htaccess でリダイレクトしたり、wwwあり・なし統一などやりますが、よくやり方を忘れて都度調べ直してしまうことがあります。 今日はよく使う . [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは masa です。今日はサーバー側の話です。よく .htaccess でリダイレクトしたり、wwwあり・なし統一などやりますが、よくやり方を忘れて都度調べ直してしまうことがあります。</p>
<p><span id="more-1304"></span></p>
<p>今日はよく使う .htaccess の処理をまとめてみます。</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong> URLをwwwありに統一</strong></span></p>
<pre class="theme:dark-terminal lang:default decode:true">RewriteEngine on
RewriteCond %{HTTP_HOST} ^hoge\.jp
RewriteRule (.*) http://www.hoge.jp/$1 [R=301,L]</pre>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong> URLをwwwなしに統一</strong></span></p>
<pre class="theme:dark-terminal lang:default decode:true">RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.hoge\.jp
RewriteRule (.*) http://hoge.jp/$1 [R=301,L]</pre>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong> http → httpsリダイレクト(301)</strong></span></p>
<pre class="theme:dark-terminal lang:default decode:true">RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://hoge.jp/$1 [R=301,L]</pre>
<p>&nbsp;</p>
<p><strong><span class="hcss1" style="font-size: 14pt;"> co.jp → jpリダイレクト(301)</span></strong></p>
<pre class="theme:dark-terminal lang:default decode:true ">RewriteEngine On
RewriteCond %{HTTP_HOST} ^hoge.co.jp
RewriteRule ^(.*) http://hoge.jp/$1 [R=301,L]</pre>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong> Basic認証</strong></span></p>
<pre class="theme:dark-terminal lang:default decode:true ">#vim .htaccess
--------------------------
AuthUserFile     /var/www/html/.htpasswd   //絶対パス
AuthName     "IDとパスを入れてね"  //メッセージ表示
AuthType     Basic
require     valid-user
--------------------------

#htpasswd -c /var/www/html/.htpasswd hogeuser  //ユーザー名を末尾に入れる
任意のパスワードを2回入力</pre>
<p>&nbsp;</p>
<p><strong><span class="hcss1" style="font-size: 14pt;">UserAgentにより振り分け </span></strong></p>
<pre class="theme:dark-terminal lang:default decode:true ">RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} (iPhone|Android)  //iPhoneとAndroidからのアクセスを振り分け
RewriteRule ^$ /iphone/ [R]   //上記のユーザーは /iphone/ のコンテンツを見せる</pre>
<p>&nbsp;</p>
<p><strong><span class="hcss1" style="font-size: 14pt;"> CGI実行許可</span></strong></p>
<pre class="theme:dark-terminal lang:default decode:true ">RewriteEngine on
Options +ExecCGI
AddType text/html cgi
AddHandler cgi-script cgi</pre>
<p>&nbsp;</p>
<p>いかがでしたか？簡単ではありますが、よく使う .htaccess の処理をまとめてみました。ちょっと備忘録的になりましたが、みなさんの一助になれば幸いです。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1304</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WP Social Bookmarking Light のいいね！を FaceBook ページにする</title>
		<link>https://cloudear.jp/blog/?p=1293</link>
		<comments>https://cloudear.jp/blog/?p=1293#comments</comments>
		<pubDate>Sun, 21 Jun 2015 14:08:52 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[フロントエンド]]></category>
		<category><![CDATA[プログラム]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1293</guid>
		<description><![CDATA[みなさんこんにちは、masa です。今日は WordPress のソーシャルボタンでもっとも人気のあるプラグイン『wp-social-bookmarking-light』でいいね！を FaceBook ページにする方法を [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは、masa です。今日は WordPress のソーシャルボタンでもっとも人気のあるプラグイン『<strong>wp-social-bookmarking-light</strong>』でいいね！を FaceBook ページにする方法をご紹介します。</p>
<p><span id="more-1293"></span></p>
<p>やり方は簡単です。まずはプラグイン設定画面から facebook_like を有効にします。<br />
<a href="https://cloudear.jp/blog/wp-content/uploads/2015/06/wpsb1.png"><img class="alignnone size-full wp-image-1294" src="https://cloudear.jp/blog/wp-content/uploads/2015/06/wpsb1.png" alt="wpsb1" width="931" height="611" /></a></p>
<p>&nbsp;</p>
<p>次に以下のファイルを開きます。</p>
<pre class="lang:default decode:true ">wp-content/plugins/wp-social-bookmarking-light/modules/services.php</pre>
<p>&nbsp;</p>
<p>facebook_like 関数の中の <strong>data-href= </strong>に任意のフェイスブックページ URL を入れます（15行目、16行目）</p>
<pre class="lang:default decode:true">    function facebook_like()
    {
        $options = wp_social_bookmarking_light_options();
        $layout = $options['facebook_like']['layout'];
        $action = $options['facebook_like']['action'];
        $share = $options['facebook_like']['share'] ? 'true' : 'false';
        $width = $options['facebook_like']['width'];
        $locale = $options['facebook']['locale'];
        $version = $options['facebook']['version'];
        $fb_root = $options['facebook']['fb_root'] ? '&lt;div id="fb-root"&gt;&lt;/div&gt;' : '';
       
        if($version == "html5"){
            return $this-&gt;link_raw( $fb_root
                                    .'&lt;div class="fb-like" '
                                    //.'data-href="'.$this-&gt;url.'" '  コメントアウトして下記入力                               
                                      .'data-href="https://www.facebook.com/pages/%E6%R3/3501101347" '
                                    .'data-layout="'.$layout.'" '
                                    .'data-action="'.$action.'" '
                                    .($width != "" ? 'data-width="'.$width.'" ' : '')
                                    .'data-share="'.$share.'" '
                                    .'data-show_faces="false" &gt;'
                                    .'&lt;/div&gt;');
        }</pre>
<p>&nbsp;</p>
<p>すると、いいね！の対象が、指定したフェイスブックページに変更されます↓<br />
<a href="https://cloudear.jp/blog/wp-content/uploads/2015/06/wpsb2.png"><img class="alignnone size-full wp-image-1298" src="https://cloudear.jp/blog/wp-content/uploads/2015/06/wpsb2.png" alt="wpsb2" width="764" height="211" /></a></p>
<p>&nbsp;</p>
<p>いかがでしたか？今日はソーシャルボタンプラグインのいいね！の対象をフェイスブックページへ変更する方法をご案内しました。WP Social Bookmarking Light はもっともメジャーなプラグインだと思いますので、プラグインをお使いの方に今回の記事が参考になれば幸いです。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1293</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Font Awesome で簡単にアイコンを導入する</title>
		<link>https://cloudear.jp/blog/?p=1270</link>
		<comments>https://cloudear.jp/blog/?p=1270#comments</comments>
		<pubDate>Sun, 14 Jun 2015 12:10:53 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[フォント]]></category>
		<category><![CDATA[フロントエンド]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1270</guid>
		<description><![CDATA[みなさんこんにちは、masa です。今日は CSS でアイコンを表現する Font Awesome (フォントオーサム) の使い方を紹介したいと思います。画像を使わないので、スマートフォン向けにも導入しやすいと思います。 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは、masa です。今日は CSS でアイコンを表現する Font Awesome (フォントオーサム) の使い方を紹介したいと思います。画像を使わないので、スマートフォン向けにも導入しやすいと思います。<br />
<span id="more-1270"></span></p>
<p><a href="http://fortawesome.github.io/Font-Awesome/" target="_blank"><img class="alignnone size-full wp-image-1273" src="https://cloudear.jp/blog/wp-content/uploads/2015/06/fontawesome1.png" alt="fontawesome1" width="1186" height="487" /></p>
<p></a><a href="http://fortawesome.github.io/Font-Awesome/" target="_blank"><img class="alignnone size-full wp-image-1283" src="https://cloudear.jp/blog/wp-content/uploads/2015/06/fontawesome4.png" alt="fontawesome4" width="1078" height="405" /></a></p>
<p>&nbsp;</p>
<p>ローカルで使う場合は上記公式サイトの Download から落として解凍してください。</p>
<p>サーバー上ですぐに使う場合は以下コマンドを実行して /css などお使いのディレクトリにファイルを入れてください。バージョンは新しくなっているかもしれないので、適宜バージョンの番号は変えてください。</p>
<pre class="theme:dark-terminal lang:default decode:true "># wget http://fortawesome.github.io/Font-Awesome/assets/font-awesome-4.3.0.zip
# unzip font-awesome-4.3.0.zip
</pre>
<p>&nbsp;</p>
<p>fonts ディレクトリと css ファイルだけをドキュメントルートにコピーしてください。以下のような構成になっていれば問題ありません。</p>
<pre class="lang:default decode:true ">/var/www/html/fonts
/var/www/html/css/font-awesome.css
/var/www/html/css/font-awesome.min.css   //minファイルが不要であれば消してください</pre>
<p>&nbsp;</p>
<p>次は html ファイルの head タグで以下のようにしてください。</p>
<pre class="lang:default decode:true ">&lt;head&gt;
  &lt;link rel="stylesheet" type="text/css" href="css/font-awesome.css"&gt;
  &lt;link rel="stylesheet" type="text/css" href="css/font-awesome.min.css"&gt; //不要なら消し(ry
&lt;/head&gt;</pre>
<p>&nbsp;</p>
<p>これでアイコンフォントを使えるようになりました。早速使ってみましょう。基本的な使い方は <i> タグの中の class に使いたいアイコンを書きます。</i></p>
<pre class="theme:dark-terminal lang:default decode:true ">&lt;i class="fa fa-twitter fa-lg"&gt;&lt;/i&gt;&lt;/a&gt;

// fa は fontawesome のクラスを表す必須記述
// fa-twitter はアイコン名　ここに使いたいアイコン名を入れて使う
// fa-lg はアイコンのサイズ指定　サイズは以下の中から指定可能

なし  ：100%
fa-lg : 133%
fa-2x : 200%
fa-3x : 300%
fa-4x : 400%
fa-5x : 500%</pre>
<p>&nbsp;</p>
<p>上記サンプルだとこのようにツイッターのアイコンが出ました。<br />
<a href="https://cloudear.jp/blog/wp-content/uploads/2015/06/fontawesome3.png"><img class="alignnone size-full wp-image-1281" src="https://cloudear.jp/blog/wp-content/uploads/2015/06/fontawesome3.png" alt="fontawesome3" width="973" height="46" /></a></p>
<p>その他のアイコンについては公式サイトの<a href="http://fortawesome.github.io/Font-Awesome/icons/" target="_blank"><strong>アイコン一覧</strong></a>を見て、指定してくださいね。</p>
<p>&nbsp;</p>
<p>いかがでしたか？今日は画像を使わずにアイコンを導入できる Font Awesome の使い方をご紹介しました。2015年6月現在で <strong>519個 </strong>のアイコンが使えます。アイコンフォントを提供しているサービスは他にもあるのですが、今のところ一番数が多いのはこの Font Awesome だと思います。みなさんも簡単に使えるアイコンフォントでサイトを飾ってみてくださいね。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1270</wfw:commentRss>
		<slash:comments>1</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>Jenkinsでレポート出力　Cobertura &amp; Findbugs &amp; CheckStyle</title>
		<link>https://cloudear.jp/blog/?p=1171</link>
		<comments>https://cloudear.jp/blog/?p=1171#comments</comments>
		<pubDate>Sun, 31 May 2015 11:45:50 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[インフラ]]></category>
		<category><![CDATA[フロントエンド]]></category>
		<category><![CDATA[プログラム]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1171</guid>
		<description><![CDATA[みなさんこんにちは、masa です。今回は Jenkins でカバレッジレポートと静的解析レポートを出力する方法を取り上げてみたいと思います。まだ Jenkins が入っていないよという方は以前の記事を参照に入れてみてく [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは、masa です。今回は Jenkins でカバレッジレポートと静的解析レポートを出力する方法を取り上げてみたいと思います。まだ Jenkins が入っていないよという方は<a title="Jenkins のインストール方法" href="https://cloudear.jp/blog/?p=765" target="_blank">以前の記事</a>を参照に入れてみてくださいね。</p>
<p><span id="more-1171"></span></p>
<p>みなさんは Jenkins を使う目的は何ですか？おそらく大多数の方は <strong>git pull → ビルド→ サーバーへデプロイ</strong>  というサイクルで使用されているのではないでしょうか。</p>
<p>Jenkins にはプラグインが数百とあるので他にもできることはたくさんあるのですが、<strong>レポートを出す機能を使うことでプロダクトコードの品質を高める一助になります。</strong></p>
<p>&nbsp;</p>
<p><strong><span class="hcss1" style="font-size: 14pt;"> そもそもカバレッジとか静的解析レポートってなに？</span></strong></p>
<p>カバレッジレポートというのは全体のコードに対してテストがどれくらい完了したか、テスト進捗を表すものです。<br />
静的解析というのはソース中にバグを発生させるようなコードや、非効率な書き方がないかなどを調べて、コードを強化するためのものです。</p>
<ul>
<li><strong>Cobertura</strong> (<span style="font-size: 8pt;">コベルトゥーラ)     </span>：　カバレッジレポート</li>
<li><strong>FindBugs              　        </strong>：　静的解析レポート（バグチェック中心）</li>
<li><strong>CheckStyle                      </strong>：　静的解析レポート（コーディング規約チェック中心）</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 14pt;"><strong>Cobertura 画面</strong></span><a href="https://cloudear.jp/blog/wp-content/uploads/2015/05/jenkins-3.png"><img class="alignnone size-full wp-image-1184" src="https://cloudear.jp/blog/wp-content/uploads/2015/05/jenkins-3.png" alt="jenkins-3" width="1363" height="685" /></a></p>
<p><strong><span style="font-size: 14pt;">FindBugs 画面</span></strong><br />
<a href="https://cloudear.jp/blog/wp-content/uploads/2015/05/jenkins-5.png"><img class="alignnone size-full wp-image-1185" src="https://cloudear.jp/blog/wp-content/uploads/2015/05/jenkins-5.png" alt="jenkins-5" width="1363" height="681" /></a></p>
<p><strong><span style="font-size: 14pt;">ChechkStyle 画面</span></strong><br />
<a href="https://cloudear.jp/blog/wp-content/uploads/2015/05/jenkins-4.png"><img class="alignnone size-full wp-image-1186" src="https://cloudear.jp/blog/wp-content/uploads/2015/05/jenkins-4.png" alt="jenkins-4" width="1363" height="679" /></a></p>
<p>&nbsp;</p>
<p><strong><span class="hcss1" style="font-size: 14pt;"> 早速 Jenkins のレポート機能を追加する</span></strong></p>
<p>3つのレポートですが、<span style="text-decoration: underline;">Jenkins からプラグインを入れればすぐに使えるというわけではありません</span>。まずは Mavenプロジェクトの pom.xml に以下を追記して各プラグインをインストールします。</p>
<p><strong><span style="font-size: 14pt;"><span style="font-size: 12pt;">pom.xml</span>  </span></strong>※各プラグインのバージョンは適宜変えてください</p>
<pre class="lang:default decode:true">    &lt;build&gt;
        &lt;plugins&gt;
            &lt;plugin&gt;
                &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
                &lt;artifactId&gt;cobertura-maven-plugin&lt;/artifactId&gt;
                &lt;configuration&gt;
                    &lt;formats&gt;
                        &lt;format&gt;html&lt;/format&gt;
                        &lt;format&gt;xml&lt;/format&gt;
                    &lt;/formats&gt;
                    &lt;instrumentation&gt;
                    &lt;/instrumentation&gt;
                &lt;/configuration&gt;
            &lt;/plugin&gt;
        &lt;/plugins&gt;
        &lt;pluginManagement&gt;
            &lt;plugins&gt;
                &lt;plugin&gt;
                    &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
                    &lt;artifactId&gt;cobertura-maven-plugin&lt;/artifactId&gt;
                    &lt;version&gt;2.6&lt;/version&gt;
                    &lt;configuration&gt;
                        &lt;executions&gt;
                            &lt;execution&gt;
                                &lt;phase&gt;package&lt;/phase&gt;
                                &lt;goals&gt;
                                    &lt;goal&gt;cobertura&lt;/goal&gt;
                                &lt;/goals&gt;
                            &lt;/execution&gt;
                        &lt;/executions&gt;
                    &lt;/configuration&gt;
                &lt;/plugin&gt;
                &lt;plugin&gt;
                    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
                    &lt;artifactId&gt;maven-checkstyle-plugin&lt;/artifactId&gt;
                    &lt;version&gt;2.14&lt;/version&gt;
                &lt;/plugin&gt;
                &lt;plugin&gt;
                    &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
                    &lt;artifactId&gt;findbugs-maven-plugin&lt;/artifactId&gt;
                    &lt;version&gt;3.0.0&lt;/version&gt;
                    &lt;executions&gt;
                        &lt;execution&gt;
                            &lt;phase&gt;compile&lt;/phase&gt;
                            &lt;goals&gt;
                                &lt;goal&gt;findbugs&lt;/goal&gt;
                            &lt;/goals&gt;
                        &lt;/execution&gt;
                    &lt;/executions&gt;
                &lt;/plugin&gt;
            &lt;/plugins&gt;
        &lt;/pluginManagement&gt;
    &lt;/build&gt;
    &lt;reporting&gt;
        &lt;plugins&gt;
            &lt;plugin&gt;
                &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
                &lt;artifactId&gt;findbugs-maven-plugin&lt;/artifactId&gt;
                &lt;configuration&gt;
                    &lt;effort&gt;Max&lt;/effort&gt;
                    &lt;xmlOutput&gt;true&lt;/xmlOutput&gt;
                &lt;/configuration&gt;
            &lt;/plugin&gt;
            &lt;plugin&gt;
              &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
              &lt;artifactId&gt;maven-checkstyle-plugin&lt;/artifactId&gt;
              &lt;version&gt;2.14&lt;/version&gt;
              &lt;reportSets&gt;
                &lt;reportSet&gt;
                  &lt;reports&gt;
                    &lt;report&gt;checkstyle&lt;/report&gt;
                  &lt;/reports&gt;
                &lt;/reportSet&gt;
              &lt;/reportSets&gt;
            &lt;/plugin&gt;
        &lt;/plugins&gt;
    &lt;/reporting&gt;</pre>
<p>&nbsp;</p>
<p>次に Jenkins の管理画面から各プラグインをインストールします。</p>
<p><strong>Jenkinsトップ＞Jenkinsの管理＞プラグインの管理＞利用可能タブ＞フィルター</strong></p>
<p>以下を検索してインストール</p>
<ul>
<li>cobertura</li>
<li>findbugs</li>
<li>checkstyle</li>
</ul>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/05/jenkins-6.png"><img class="alignnone size-full wp-image-1189" src="https://cloudear.jp/blog/wp-content/uploads/2015/05/jenkins-6.png" alt="jenkins-6" width="1363" height="685" /></a></p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong> 各レポート機能を有効にする</strong></span></p>
<p><strong>1．プロジェクトの中の「設定」からビルド方法を指定する</strong></p>
<ul>
<li>ビルド＞ゴールとオプションに以下を入力<br />
clean cobertura:cobertura</li>
</ul>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/05/goal_option.png"><img class="alignnone size-full wp-image-1235" src="https://cloudear.jp/blog/wp-content/uploads/2015/05/goal_option.png" alt="goal_option" width="910" height="334" /></a></p>
<p>&nbsp;</p>
<p><strong>2．プロジェクトの中の「設定」から以下を変更する</strong></p>
<ul>
<li>Checkstyle警告の集計にチェック入れる</li>
<li>FindBugs警告の集計にチェックを入れる</li>
<li>ビルド後の処理&gt;Cobertura カバレッジ・レポートの集計&gt;Cobertura XMLレポート パターンに以下を入力<br />
**/target/site/cobertura/coverage.xml</li>
</ul>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/05/jenkins-7.png"><img class="alignnone size-full wp-image-1190" src="https://cloudear.jp/blog/wp-content/uploads/2015/05/jenkins-7.png" alt="jenkins-7" width="979" height="673" /></a></p>
<p>&nbsp;</p>
<p>以上でプロジェクトがビルドされるとレポートを見るリンクが現れて、ビルドに対する各レポート結果が見れるようになります。<br />
<a href="https://cloudear.jp/blog/wp-content/uploads/2015/05/jenkins-2.png"><img class="alignnone size-full wp-image-1191" src="https://cloudear.jp/blog/wp-content/uploads/2015/05/jenkins-2.png" alt="jenkins-2" width="1363" height="681" /></a></p>
<p>&nbsp;</p>
<p>いかがでしたか？今日は Jenkins の便利なレポート機能について導入方法をご紹介しました。個人的にオススメは FindBugs です。日本語で自分のコードの欠点がすぐに確認できるのは楽しいです。みなさんもプロダクト品質向上の一助にレポート機能を追加してみてください。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1171</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>さくらの VPS でコピペで使える iptables</title>
		<link>https://cloudear.jp/blog/?p=1149</link>
		<comments>https://cloudear.jp/blog/?p=1149#comments</comments>
		<pubDate>Sun, 24 May 2015 13:12:26 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[VPS]]></category>
		<category><![CDATA[インフラ]]></category>
		<category><![CDATA[サーバー]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1149</guid>
		<description><![CDATA[みなさんこんにちは、masa です。今日はインフラネタの中でも、VPS を取り上げたいと思います。AWS や Azure などのクラウドサービスだと画面上から「セキュリティグループ」を設定すれば必要最低限のセキュリティ設 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは、masa です。今日はインフラネタの中でも、VPS を取り上げたいと思います。AWS や Azure などのクラウドサービスだと画面上から「セキュリティグループ」を設定すれば必要最低限のセキュリティ設定はできるのですが、VPS の場合はサーバーにログインして iptables を設定しなくてはいけないことが多いです。<br />
<span id="more-1149"></span>ということで、手っ取り早くコピペで設定する方法をご紹介します。</p>
<p>まずはサーバーに SSH でログインしてください。<br />
次に以下のコマンドで iptables ファイルを開きます。</p>
<pre class="theme:dark-terminal lang:default decode:true"># vim /etc/sysconfig/iptables</pre>
<p>&nbsp;</p>
<p>以下を貼り付けてください。</p>
<pre class="theme:dark-terminal lang:default decode:true "># Generated by iptables-save v1.4.7 on Wed Mar  4 20:57:21 2015
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4:528]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
COMMIT</pre>
<p><strong>7行目： データがないパケットの接続を破棄<br />
8行目： SYNflood（接続をあぶれさせる）攻撃の接続を破棄する<br />
9行目： ステルススキャン（足跡を残さずに空いているポートをスキャンしに来る）接続を破棄する<br />
10行目：localhostからの通信を許可<br />
11行目：Ping通信を許可<br />
12行目以降：各サービスの接続を許可 (SSH, HTTP, POP3, SMTP, SUBMISSION, HTTPS)</strong></p>
<p>必要最低限のものは上で空いています。他にも空けたいポートがある場合は、同じように追記してみてください。</p>
<p>次に、上記設定を iptables へ反映させるため iptables を再起動します。</p>
<pre class="theme:dark-terminal lang:default decode:true "># /etc/sysconfig/iptables restart</pre>
<p>&nbsp;</p>
<p>実際に設定が反映されたか確認してみます。</p>
<pre class="theme:dark-terminal lang:default decode:true"># iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE 
DROP       tcp  --  anywhere             anywhere            tcp flags:!FIN,SYN,RST,ACK/SYN state NEW 
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG 
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:submission 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination</pre>
<p>&nbsp;</p>
<p>いかがでしたか？今日は VPS で必要最低限な iptables をする方法をご紹介しました。契約したまま何も設定していないの、裸でゲットーを歩いているのと同じですので すぐに対処してくださいね。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1149</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
