C#の静的解析と言えばStyleCop
みなさんC#でも静的解析を行っているでしょうか。
その前に静的解析とは? 静的コード解析 - Wikipedia
JavaだとFindbugsという有名な静的解析ツールがあります。 1年前くらいにC#開発をやってたのですが、C#にもFindbugs的な静的解析ツール無いかなぁと探してたら、 StyleCopってのがあるんですね。
静的解析をやっておけば、書き方の統一や潜在的なバグを防ぐことができます。 ということで、StyleCopの導入手順を簡単にご紹介。
StyleCopのダウンロード・インストール
以下のサイトの「Download」よりStyleCop本体をダウンロードします。
インストールはそのまま進んでいけば大丈夫です。
Visual StudioでStyleCopの実行
インストールが出来ればVisual Studioで実行ができます。 プロジェクトを右クリックすると以下のようにStyleCopの実行メニューが表示されます。 これを実行することによって、対象のプロジェクトに静的解析が実行されます。
実行結果の確認
静的解析の結果は警告として表示されます。 英語なのですが「SA1633」等でググれば日本語で解説されているサイトに行き着くと思います。
Jenkinsで実行できるともっといいかもしれませんね。
VirtualBoxでWindowsの仮想環境を作ろう
いろんなプロジェクトやってると動作検証用PC確保が問題となります。 自分のマシンで動作検証といっても既に色々なソフトをインストールしているので本来検証したい環境にするのは大変です。
プロジェクトに特化したOSがあるといいですよね!仮想マシン使えばそれが出来ます!
vagrantという環境をサクッと作れるツールも存在しますが、まだWindowsクライアント用のboxは無いみたいです(この記事執筆時点)。
ここではWindows7 64bitのマシンにVirtualBoxをインストールしてWindows7 64bitの仮想マシンを立ち上げてみましょう。
事前準備 64bitOSの仮想マシンを使用するにはBIOSの設定が必要です。 PCのBIOS画面で仮想化支援機構(VT-x/AMD-V)を有効にしてください。 BIOS画面の立ち上げ方や仮想化支援機構の設定箇所はメーカーや機種によって異なるので手助けできません。マニュアル見るかググってください。 そもそも仮想化支援機構に対応していない場合は別のマシンにするか32bitOSをインストールしましょう。以降64bitは32bitと読み替えてください。
マシンのCPUが仮想化支援機構に対応しているかは下記ページを見てみてください。 http://ark.intel.com/ja/Products/VirtualizationTechnology
1.MicroSoftがWindows7や8の試用版を用意してくれています。Windows7試用版のDVDイメージファイルをダウンロードしましょう。 http://technet.microsoft.com/ja-jp/evalcenter/dn407368 ※MicroSoftのアカウントが必要です。 私がダウンロードしたWindos7 64bitのファイル名は 7600.16385.090713-1255_x64fre_enterprise_ja-jp_EVAL_Eval_Enterprise-GRMCENXEVAL_JA_DVD.isoです(長っ!)。
2.VirtualBoxをダウンロードしてインストールします。「Windows (32-bit/64-bit)」を選んでインストールしましょう。 http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp#vbox
最初のまとめ
- BIOS画面から仮想化支援機構(VT-x/AMD-V)を有効にしよう。
- VirtualBoxをインストールしよう。
- MicroSoftから試用版WindowsのDVDイメージをダウンロードしよう。
ではVirtualBoxを起動して始めましょう。
3.VirtualBoxで仮想マシン作成をクリックします。
4.仮想マシン名をつけましょう。バージョンはWindows64bitにします。 ここで64bitが選択できないあなた。事前準備の仮想化支援機構が有効になっていないです。
5.メモリは2GBあてましょう。最初はよくわからずに512MBのまま続けちゃってOSインストールで落ちてしまいました。 OSの最低動作要件は確保しましょう。
6.仮想マシンはOSまるまるひとつのファイルとなります。その形式を選びます。通常はそのままで良いでしょう。 ハードディスクサイズは後から増やすの面倒くさいらしいのでやや余裕を持った容量にしましょう。100GBとか。 実際のファイルサイズはそれより小さいので心配しなくてよいです。
7.作成した仮想マシンを右クリックして「設定」を選択します。ここでメモリ割り当てとかネットワーク設定とかできるんですね。 まずOSをインストールしないといけないので「ストレージ」を選択し7600.16385.0907……_DVD.isoを選択します。
8.仮想マシンを起動するとDVDイメージが読み込まれてOSインストールが始まります。なんかパソコン上でOSインストールって変な感じ。後は画面の指示に従ってインストールしてください。
9.OSのインストールが終わりましたが…、解像度がフルにならないです。そのままだと最も貧弱な状態のディスプレイになります。 ゲストOSにVBoxGuestAdditionsをインストールすると解消されます。ストレージにVBoxGuestAdditions.isoをマウントしましょう。ファイルは以下にあります。 C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso
10.VBoxWindowsAdditionsインストールはゲストOS上で行います。ゲストOSのエクスプローラーを使ってVBoxWindowsAdditions.exeを立ち上げましょう。あとはそのままインストールしましょう。 ゲストOSでもめでたく高解像度が使えるようになります。VBoxGuestAdditionsについてはこちらのサイトを参考にさせていただきました。http://exlight.net/linux/vbox_guest_additions/index.html
仮想マシンのDVDドライブにVBoxGuestAdditionsが出てきます。右クリックで「開く」
VBoxWindowsAdditionsをダブルクリックしてインストールしましょう。
そのまま「Next」で進めましょう。
11.これで画面の解像度もマトモになりました!インストール直後はサービスパックも当たっていませんのでWindowsUpdateの嵐です。なんだかんだで半日近く要しました_| ̄|○。予めサービスパックをダウンロードしとけばよかったと後悔。いやそれよりもサービスパック適用済みのISOファイルを用意してくれ、Microsoftよ。
12.バックアップ&他のマシンで使えるようにクローンをとりましょう。クローンしたVHDファイルであれば他のPCのVirtualBoxでも使用できます。
13.最初の10日は認証無しで使用できます。その後認証を求められますが認証した時点で90日間試用版として使用できます。試用版といっても機能は特に制限されていないようです。
認証してから90日っていうのがポイント。環境作ってしばらくほっておいても未認証であればそこから90日使えるんですね。 認証の猶予期間である10日間のうちに全力で必要な検証環境を用意しましょう。その状態でクローンを取っておけばいつでも同一環境で90日間利用できますよ。
14.その他もろもろ
設定画面のネットワークは「NAT」だと同一LAN内にはアクセスできませんがインターネットにはつながります。 よくわからなければ「ブリッジ アダプター」を奨めます。同一LAN内に独立した1台のPCとして存在するようになってファイルの共有とかネットワークプリンターへのアクセスとか通常のPCのように使えます。
VirtualBoxの弱点なのですが、Windows同士ではホストOSゲストOS間でクリップボードが使用できません。ファイルを仮想マシンにコピーしたいときとか文字列コピペができないので非常に不便です。 その対策としてリモートデスクトップでの操作をおすすめします。仮想マシンのリモートデスクトップを有効にしておけば、リモートデスクトップ経由でクリップボードが利用できますので便利ですよ。
設定画面ではCPUのプロセッサー数や占有率を変更できます。あえて低スペック状態でレスポンス検証したりできます。
VirtualBoxではスナップショットという機能があり、その時点のバックアップをとれます。このソフトを試しにインストールしてみようかな?と思った時は仮想マシンで実験してダメならすぐ戻せます。
ホストOS+ゲストOSでメモリ食うんで最低6GB積んだパソコンでやったほうがいいよ。
...実は90日試用版を延長する方法もあります。これはググってね。
まとめ
- VirtualBoxでPC上に別のWindowsを立ち上げることができる。
- OSはMicrosoftからダウンロードできる。
- 最初の10日間は猶予期間。認証した時点から90日間使用できる。
- クローン作っておけばその時点の環境をすぐに再構築できる。
PostgreSQLのインストール
最近さわったPostgreSQLの覚え書きを。
■環境 CentOS6.5 PostgreSQL9.3
パッケージではなく、ソースコードコードからインストールしました。
- インストール前の準備(PostgreSQL用ユーザー、インストール先ディレクトリの作成)
- ソースのダウンロード、展開
- インストール ※事前にreadline,zlibのインストールが必要
- 環境変数の設定 ※.bashrcに以下を追加,反映
- データベースの初期化 ※PostgreSQLを使用可能な状態にする
- 起動と停止
- PostgreSQL接続用一般ユーザーの作成とDB接続
[root@vagrant-ce65 ~]# useradd postgres [root@vagrant-ce65 ~]# cd /usr/local/src/ [root@vagrant-ce65 src]# mkdir /usr/local/src/postgresql-9.3.4 [root@vagrant-ce65 src]# chown postgres:postgres /usr/local/src/postgresql-9.3.4 [root@vagrant-ce65 src]# mkdir /usr/local/pgsql [root@vagrant-ce65 src]# chown postgres:postgres /usr/local/pgsql/
[root@vagrant-ce65 src]# su - postgres [postgres@vagrant-centos65 ~]$ wget http://ftp.postgresql.org/pub/source/v9.3.4/postgresql-9.3.4.tar.gz [postgres@vagrant-centos65 ~]$ tar zxvf postgresql-9.3.4.tar.gz -C /usr/local/src/※wgetが入ってなかったらyum install wget、ソースアーカイブの展開先指定(tar -Cオプション)
[root@vagrant-ce65 src]# yum install readline readline-devel [root@vagrant-ce65 src]# wget http://www.zlib.net/zlib-1.2.8.tar.gz [root@vagrant-ce65 src]# tar zxvf zlib-1.2.8.tar.gz [root@vagrant-ce65 src]# cd zlib-1.2.8 [root@vagrant-ce65 zlib-1.2.8]# ./configure [root@vagrant-ce65 zlib-1.2.8]# make [root@vagrant-ce65 zlib-1.2.8]# make install [root@vagrant-ce65 zlib-1.2.8]# su - postgres [postgres@vagrant-centos65 ~]$ cd /usr/local/src/postgresql-9.3.4/ [postgres@vagrant-centos65 postgresql-9.3.4]$ ./configure [postgres@vagrant-centos65 postgresql-9.3.4]$ make [postgres@vagrant-centos65 postgresql-9.3.4]$ make install
[postgres@vagrant-centos65 ~]$ vi .bashrc export PATH=$PATH:/usr/local/pgsql/bin export MANPATH=$MANPATH:/usr/local/pgsql/man export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib export PGDATA=/usr/local/pgsql/data ・ ・ [postgres@vagrant-centos65 ~]$ source .bashrc
[postgres@vagrant-centos65 ~]$ initdb --encoding=UTF8 --no-locale
[postgres@vagrant-centos65 ~]$ pg_ctl -w start [postgres@vagrant-centos65 ~]$ pg_ctl stop※DB接続中のユーザーがいる場合は-mオプションを付けて停止する。 $ pg_ctl -m 停止方法 [s(mart)|f(ast)|i(mmediate)] stop
[postgres@vagrant-centos65 data]$ createuser kuma [postgres@vagrant-centos65 data]$ psql postgres kuma psql (9.3.4) Type <help> for help.postgres=>; \q
PostgreSQLでSQLファイルをWindowsのbatで実行する
こんちわ、堀之内です。
先日リリース作業を行った際に、DBの変更が大量でsqlを全て流すのが面倒だったのでフォルダ内のsqlを流すbatを作ってみました。
実は、sqlファイルを実行するのは簡単でpsql.exeにファイルパスを渡してあげれば実行してくれます。
しかし、実行時に毎回パスワード入力を要求されるので、これを回避するために実行ユーザのホームディレクトリにpgpassファイルを配置します。
これが有るとパスワード要求無しでpsql.exeを実行する事ができるので先にpgpassファイルを作ってやります。
ユーザーのホームディレクトリは「%APPDATA%」で取得できます。
SET HOSTNAME=HostName SET PORT=5432 SET USERID=UserName SET PASSWD=UserPassWord SET DATABASE=DatabaseName IF NOT EXIST "%APPDATA%\postgresql\pgpass.conf" ( MKDIR "%APPDATA%\postgresql" ECHO %HOSTNAME%:%PORT%:*:%USERID%:%PASSWD% > "%APPDATA%\postgresql\pgpass.conf" )
後は指定フォルダ内の「.sql」をファイルを取得してループ実行してやります。
FOR /F "usebackq delims==" %%i IN (`DIR /B sql\*.sql`) DO ( psql.exe -h %HOSTNAME% -p %PORT% -d %DATABASE% -U %USERID% -f sql\%%i > log\%%i.log 2>&1 )
ログをファイルに出力したりするとするとより良いのかもしれませんがここまでとします。
FuelPHPでYammerのAPIを叩いてみた #FuelPHP #yammer
どうも僕です。
タイトルの通りなんですが、FuelPHPでYammerに接続してみました。 ついでにpackageの作り方も気になったので、packgeを使って実装してみました。
APIの仕様は、http://developer.yammer.com/authentication/#a-oauth2この通り実装しました。 処理フローはTwitterとかFacebookとかと同じような感じだと思います。
packageの構成は、下記の感じにしました。
fuel ├─ packages ├─ yammer ├─ classes │ ├ yammer.php ├─ config │ ├ yammer.php └─ bootstrap.php
まず、APIへアクセスするクラス fuel/packages/classes/yammer.php
<?php namespace Yammer; class Yammer { public static function _init() { \Session::get('yammer.access_token',''); \Config::load('yammer', true); } public static function forge() { return new \Yammer\Yammer; } /** * 認証用URLの生成 * * @param string $redirect_uri リダイレクト先のURL * @return string Yammer認証用(アプリ認証画面)のURL */ public static function get_authentication_url($redirect_uri = null) { if (is_null($redirect_uri)) { $redirect_uri = \Config::get('yammer.redirect_uri',''); } $client_id = \Config::get('yammer.client_id',''); $auth_url = 'https://www.yammer.com/dialog/oauth?client_id=[:client_id]&redirect_uri=[:redirect_uri]' ; $auth_url = str_replace('[:client_id]', $client_id,$auth_url); $auth_url = str_replace('[:redirect_uri]',$redirect_uri,$auth_url); return $auth_url; } /** * access_tokenの取得 * * @param string $code 認証した結果のcode * @return string access_token */ public static function get_access_token($code = null) { $access_token = \Session::get('yammer.access_token',''); if (! empty($access_token )) return $access_token ; $client_id = \Config::get('yammer.client_id',''); $client_secret = \Config::get('yammer.client_secret',''); $auth_url='https://www.yammer.com/oauth2/access_token.json?client_id=[:client_id]&client_secret=[:client_secret]&code=[:code]'; $auth_url = str_replace('[:client_id]', $client_id,$auth_url); $auth_url = str_replace('[:client_secret]',$client_secret ,$auth_url); $auth_url = str_replace('[:code]',$code,$auth_url); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $auth_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $response = json_decode($response); $access_token = $response->access_token->token; \Session::set('yammer.access_token',$access_token ); return $access_token; } /** * メッセージ取得 * * @return object messages.jsonのレスポンス */ public static function get_message() { return static::get('messages'); } /** * メッセージ取得 * * @param string $type APIの種類 * @return object apiのレスポンス */ public static function get($type=null) { $headers = array(); $headers[] = "Authorization: Bearer " . \Session::get('yammer.access_token',''); $api_url = 'https://www.yammer.com/api/v1/' . $type . '.json'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $api_url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); return json_decode($output = curl_exec($ch)); } }
次は設定ファイル
※アプリケーションの登録を下記で行います。
https://www.yammer.com/client_applications
登録すると「client_id」と「client_secret」が発行されます。
fuel/packages/config/yammer.php
<?php return array( 'client_id' => '' , 'client_secret'=> '', 'redirect_uri' => '', );
最後にbootstrap fuel/packages/bootstrap.php
<?php Autoloader::add_core_namespace('Yammer'); Autoloader::add_classes(array( 'Yammer\\Yammer' => __DIR__.'/classes/yammer.php' ) );
packageの使い方 まず、fuel/packages/config/yammer.phpを fuel/app/config/yammer.phpにコピーし、取得したアプリケーション情報を設定します。
あとは、適当なコントローラから 下記の感じで呼び出す。
<?php class Controller_Yammer extends Controller { public function action_index() { $data['url'] = \Yammer\Yammer::get_authentication_url(); return View::forge('yammer/index',$data); } public function action_view() { $code = Input::get('code'); $access_token = \Yammer\Yammer::get_access_token($code); $data['response'] = \Yammer\Yammer::get_message(); return View::forge('yammer/view',$data); } }
indexが認証用の画面です。リダイレクト先がviewです。
作りがイマイチですが、とりあえず、Yammerにアクセスする方法の一例として書いてみました。 いつか、ちゃんと書きたいと思います。