コマンドラインツール作ってみた。

はじめに

最近、外人さんとメッセージすることが多かったり英語を書く機会が多いです。そんな時に英訳するときに単語が浮かばなかったりすることがあります。いちいちブラウザを開いて検索するのも大変なので、コマンドラインツールを作って、辞典をコマンドで使えるものを作ってみました。 Githubにも公開しましたー。

pgpg-sou/trans · GitHub

ツールの概要

今回は、Rubyを使って作ってみた。以下、今回使ったツール一覧です。

Thor

Thorは簡単にスマートにカジュアルにコマンドをつくることができるライブラリである。 下記のサイトがうまくまとまっているのでインストールの仕方や使い方は下記を参照にしてください

ThorでRuby製のオリジナルコマンドを作る | メモ帳代わりのブログ

Google 翻訳 API

翻訳にはGoogle 翻訳APIを用いた。 導入の仕方

  1. Google Developer Consoleに登録する。 Google Developer Consoleに登録し、新しいプロジェクトを作成する。 https://console.developers.google.com/project

  2. APIと認証 -> APIからTranslate APIを有効にする。

  3. APIと認証 -> 認証情報から「新しいキーを作成」を押して、サーバーを選択し、キーを作成する。
  4. 「課金と設定」からクレジット情報を登録する クレジット情報を登録しないと、403エラーが起こってしまう!!のでしっかり登録すること。

詳しい使い方とかはこちら

Using REST - Google Translate API — Google Cloud Platform

以上。

Rspecを使ってRailsでテストしてみた話

Rspecを用いてRailsでテストを書いてみたのでそれの備忘録。 テストについてもよくわかっていなかったのでまとめてみた。

テストについて

テストは大きく分けて下記の三つである。

ユニットテスト(単体テスト)

プログラムを構成するできるだけ小さい単位(ユニット)の機能に対して正しく動作するかどうかを検証するテスト。 関数やメソッドに対して行われることが多く、関数やメソッドのバグを取り除く目的がある。 railsの場合ではモデルに対して行うテスト。

ファンクションテスト(機能テスト)

システム開発の際に行われるテストのうち、ユーザー側から要求された機能をシステムが満足しているかどうかを検証するテスト。 ユーザーから渡されたデータと処理の結果を比較するブラックボックステストなど中でどんな処理をされてるかなどのテストというよりは要求書通りにうまくいってるかを確認するのが目的である。 railsの場合ではアクションに対して行われる。

インテグレーションテスト(総合テスト)

システム全体に行うテストであり、最終確認のテスト。 サインアップからログインまでの流れなどの一連の流れのテスト。 railsではアクション間に対してのテスト。

Rspecの導入

Railsではデフォルトでテストユニットが用意されているがRspecを用いた自動テストの環境を整えテストをしやすくする。

Rspecのインストール

Gemfileに以下のgemを追加してbundle install

group :test do  
      gem 'rspec'   
      gem 'rspec-rails'  
end  

テストを書いてみた。

Model編

準備編

まず、Rspecを用いてテストするためのmodelクラスを一つ 用意する。以下のコマンドでモデルを作成する。

$ rails g model post title:string subtitle:string 
      invoke  active_record
      create    db/migrate/20141030015802_create_posts.rb
      create    app/models/post.rb
      invoke    test_unit
      create      test/models/post_test.rb
      create      test/fixtures/posts.yml

次に作成したpostクラスをテストするためのRspecを用意する。

$ rails g rspec:model post
      create  spec/models/post_spec.rb

最後に以下のコマンドを入力してtest用のデータベースを作成する。

$ rake db:migrate RAILS_ENV=test

これで準備は終了。

テスト編

コマンドによって生成されたテストファイルを見てみると以下のような感じになっている。

なにもテストが書かれてない状態なので早速テストを書いていく。フィールドのvalidationをテストする。 仮に今回のテスト項目は以下の4点であるとする。

  • titleは空であってはいけない
  • titleは5文字 ~ 40文字以内でなければならない。
  • subtitleは空であってはいけない
  • subtitleは200字を超えてはいけない

まずは上の4つの仕様が通る場合のテストデータと通らない場合のテストデータをfixtures/posts.ymlに書いていく。下のようなテストデータを書いた。

次にこれをテストデータを用いてテストを書いていく。

流れはテストデータを読み込んでそれを実行してみて期待している値と合致してるかどうかをチェックする。 expect文の使い方は以下のリンクを参照。

rspec/rspec-expectations · GitHub

書いたテストを実行してみる。実行の方法は以下のコマンドである。

$ bundle exec rspec spec/models/......rb

まだ、validationになにも記述していないため、7個かいたテストのうち2つしか通らない。

f:id:pgpg-sou:20141030155949p:plain

postモデルにvalidationを記述してテストが通るようにする。

テストが無事に通るようになった〜!!

f:id:pgpg-sou:20141030160231p:plain

注意点

fixturesの書き方

fixturesはテストデータを読み込むためのファイルである。このファイル内ではタグを入れてはいけない。タグを入れたい気持ちをぐっと抑えてスペースを入れましょう。

Repecは元のテストとは違うディレクトリにあるので注意

Railsではデフォルトでテストツールが用意されている。それはプロジェクトのtestディレクトリ内にfixturesからいろいろ用意されているが、もちろんのことだがこれはRspecとは違うので注意が必要である。
Rspecはspecディレクトリである。(これに気づくまでに無駄に時間を食われた。)

fixturesを読み込み忘れに注意

デフォルトのテストツールではfixturesも自動で生成され、特に指定もなしに読み込んでくれるのだがRspecではfixtures :xxxxと手動で入力しなければならないので注意。

参考サイト

テスト(test) - Railsドキュメント

Railsの自動テスト(RSpecでModelのテスト編) | GMOメディア エンジニアブログ

Android開発 | HttpPostしてみた話

AndroidでHttp通信をしてサーバーにデータをPostしてみたので備忘録として記録します。

AndroidでHttp通信する方法

サンプルプログラムではボタンを押すとtestという文字列をhttp://localhost:3000にPostするプログラムです。

ポイント

  • AndroidManifestファイルの設定

プログラムからインターネットに接続するにはAndroidManifestファイルに接続許可するpermissionをONにする必要があります。

<uses-permission android:name="android.permission.INTERNET" />

  • NetworkOnMainThreadExeption

32行目を見ると以下のような命令が書いてあると思います。

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build());

もし、この文が抜けてしまうとNetWorkOnMainThreadExeptionという例外が発生します。この例外はAndroid3.1以降の端末で起こります。

原因

Android3.0までは「StrictMode」が有効になっていたのですが、これ以降のバージョンでは無効になっています。 これが無効になっているとメインスレッド(UIスレッド)でネットワーク処理を行うようなプログラムを書くと例外が発生してしまいます。

解決策

  • 「StrictMode」を有効にする(32行参照)
  • 「AsyncTask」を継承した内部クラスを作ってそこでネットワーク処理を行う

参考サイト

検索プログラマのメモ

miettalの日記

コンテンツを非同期サーバー送信する

Unicorn + NginxでさくらVPSにデプロイしてみた

Unicorn + Nginxを使ってrailsアプリケーションをデプロイしてみたので、備忘録として残しておきます。
ここでは、Ruby, Railsの環境は入ってるものとします。

Unicorn

Unicornとは

UnicornとはRackアプリケーション向けのHTTPサーバーです。詳しいことはよくわからなかったので以下を参照ください。
Everything You Need to Know About Unicorn
Unicorn!

Unicorn is an HTTP server for Ruby, similar to Mongrel or Thin. It uses Mongrel’s Ragel HTTP parser but has a dramatically different architecture and philosophy.

https://github.com/blog/517-unicorn

unicornのインストール

インストールはgemを使います。

$ gem install unicorn

unicornの設定

railsアプリケーションのconfigディレクトリの配下にunicorn.rbというファイルを作成します。
以下は最低限の設定しかしていませんが、ここにlogファイルの書き出し先とかタイムアウトとか設定することができます。
4行目、5行目に記述されているsockファイルやpidファイルについては自動に生成られるしいのでクライアントが作成する必要はありません。

pidファイルやsockファイル用のディレクトリを生成します。

$ mkdir /var/run/unicorn
$ chmod 777 /var/run/unicorn

unicornの起動

unicornの起動は以下のコマンドです。以下のコマンドはデーモンモードとしてバックグラウンド(-D)で起動させます。
また、環境はdevelopment(-E)とします。

$ unicorn_rails -c /home/railsapp/config/unicorn.rb -E development -D


Nginx

Nginxとは

軽量・高速のwebサーバーです。エンジンエックスと読むらしいです。最近、シェアが伸び初めてきているみたいで注目のwebサーバーだそうです。
アーキテクチャとかもっと詳しいことを知りたい方は以下を参考にしてください。

Nginxとは

Nginxのインストール

$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo yum install -y nginx

これでインストールは終了です。確認するにはNginxサーバを動かします。

$ sudo service nginx start

起動できたらプラウザで確認すると下のような画面が表示されます。

Nginxの設定

/etc/nginx/conf.dの直下にアプリの設定ファイルを作成する。

Nginxの起動

ここまでできたらNginxを再起動する

$ service nginx restart

参考にさせていただいたサイト

CentOS 6.3にRails実行環境を構築する(Nginx+Rails+Unicorn+PostgreSQL)
CentOS6で最新版のnginxをyumでインストールする
UbuntuでNginxとUnicornを使いRailsアプリを動かす
[開発環境] さくらVPS 開発環境編 (Rails+nginx+unicorn)

HTMLやCSSをSmartに書くためのツール(Stylus編)

前回はJadeを使ってHTMLを簡単に完結に記述する方法を紹介しました。
今回はStylusというものを使ってCSSを簡単に完結に記述する方法を紹介します。


どのようにきれいになるのかまずは例をみてみましょう。下記のsample.cssは普通のCSSのコードです。下のsample.stylはsample.cssをStylusで書いたものです。

CSSのあの括弧とかセミコロンとかがなくなってすっごくきれいになりました!!

Stylusとは

StylusはSassやLessと同様であるCSSメタ言語の一つです。

特徴はLessやSassと同様にCSS内で変数が使えたり、Mixinsができたり、入れ子ができたら.......etc といろいろあるのですが

最大の特徴はコードをRubyっぽく書けるということです。
具体的にどういうことかというとLessやSassと違ってこんなことが出来ます。

  • コロンが省略可能
  • セミコロンが省略可
  • カンマも省略可
  • 波括弧{}は省略可
  • 変数宣言もRuby構文

公式ホームページはこちら

f:id:pgpg-sou:20140402192819p:plain

Stylusのインストール手順

インストールにはNodeのnpmを使います。次のコマンドでインストールは終了です。

$ npm install  -g stylus 

 インストールされているかどうかの確認は「stylus -V」で可能です。

$ stylus -V

0.42.3

 Stylusの使い方

  1. stylファイルを作成する。以下はサンプルです。
  2. 先ほど作成したstylファイルをコンパイルする。成功すると下のような感じになります。

    $ stylus sample.styl
       compiled sample.css

  3. 出来たCSSファイルをHTMLで読み込むと使えます。

おまけ

Sublime Text 2でStylusのシンタックスハイライトを設定する

  1.  Package用のディレクトリを作成し、そこにgitからJadeの設定をcloneする

    $ mkdir -p ~/Library/Application\ Support/Sublime\ Text\ 2/Packages

    $ cd ~/Library/Application\ Support/Sublime\ Text\ 2/Packages

    $ git clone https://github.com/LearnBoost/stylus.git Stylus

  2. Sublime Text2 を再起動する
  3. View -> Syntax -> Stylusを選択する

f:id:pgpg-sou:20140402192132p:plain

 

 

 

HTMLやCSSをsmartに書くためのツール(Jade編)

HTMLの<>をいちいち書くのがめんどくさいしごちゃごちゃしてるように見える可読性が悪くなると思います。Jadeを使ってsmartにHTMLソースを書く方法を紹介します

 

突然ですが、以下の2つのソースコードを見て下さい。上の方は普通のHTMLのコードです。下は上のHTMLのコードをJadeで書いたものです。



どうですか?すばらしくないですか?これがJadeの力ですよ!!
あの、タグだらけのHTMLコードが簡単で完結になソースコードに生まれ変わりました。

Jadeとは

では、Jadeとは一体どんなものなのかを説明していきます。

Jadeはnode.jsテンプレートエンジンの一つです。なので、サーバーをnode.jsを使って作るときでないと使えません。

 

Jadeの最大の特徴はHTMLを簡単に完結にかけることです。

公式ホームページはこちらです。

f:id:pgpg-sou:20140402103850p:plain

Jadeのインストール方法

Jadeのインストール方法は以下のコマンドを叩くだけです。

$ npm install -g jade 

正しくインストールされている場合は、「jade -V」コマンドでバージョンが表示されるはずです。

$ jade -V

1.3.0

 Jadeの実行方法

  1. Jadeファイルを作成する。以下はサンプル。

  2. サーバーの設定する。

ポイント

サーバーでは通常のhtmlファイルを読み込む方法と少し違います。

先ほどのサーバーの設定をしたソースコードの4行目をみると

var html=jade.renderFile('index.jade',null);

と書いてあったと思います。これは作成したjadeファイルをコンパイルしてhtmlファイルを生成し、そのファイルを読み込むという命令です。
jadeファイルはhtmlファイルではないのでコンパイルを行う必要があります。

 

ちなみに、Jadeファイルが間違っているとこの時点でエラーが出てきます。以下は一例です。

f:id:pgpg-sou:20140402095851p:plain

おまけ

Sublime Text 2でjadeのシンタックスハイライトを設定する方法

  1.  Package用のディレクトリを作成し、そこにgitからJadeの設定をcloneする

    $ mkdir -p ~/Library/Application\ Support/Sublime\ Text\ 2/Packages

    $ cd ~/Library/Application\ Support/Sublime\ Text\ 2/Packages

    $ git clone https://github.com/davidrios/jade-tmbundle.git Jade

  2. Sublime Text2 を再起動する
  3. View -> Syntax -> Jadeを選択する。

    f:id:pgpg-sou:20140402102035p:plain

まとめ

Jadeを使ってHTMLソースコードを簡単に完結に書く方法を紹介しました。しかし、HTMLソースコードがきれいに書けても特に意味がありません。なぜかというとデザインをするとなるとCSSソースコードも記述しなければならないからです。

ということで、次回はCSSソースコードをきれいに完結にかけるツールStylusについて紹介します。

確定申告 | 医療費控除の作成手順

毎年毎年、確定申告の医療費控除で苦労しているのでここに備忘録としてのこしておきます。

医療費控除とは

昨年1月1日〜12月31日までに病院などの医療に支払った金額が10万円を超える分を控除されるものです。詳しくはこちらを参照してください。

提出する期間

普通の確定申告は2月の中旬から同年の3月の中旬までなのですが、医療費控除のみでの確定申告のいつでもいいみたいです。これも詳しくはこちらを参照してください。

提出する書類

確定申告の際に必要な書類は以下の通りです。

  • 確定申告書A
  • 医療費の明細書
  • 確定申告添付書類台紙
  • 病院などで支払った際にもらえるレシート
  • 源泉徴収

確定申告書Aと医療費の明細書は以下からダウンロードできます。

確定申告書A・添付書類台紙

http://www.nta.go.jp/tetsuzuki/shinkoku/shotoku/yoshiki01/shinkokusho/02.htm

医療費の明細書

http://www.nta.go.jp/tetsuzuki/shinkoku/shotoku/yoshiki02/pdf/003.pdf

書類の書き方

医療費の明細書

レシートを整理して医療費の合計を計算しましょう。ちなみに、この医療費控除では人間ドックは対象になりません。くわしくはこちら

  1. 昨年の1月1日〜12月31日までのレシートを整理する。
    医療費の明細書に「医療を受けた人」という欄があるため、医療を受けた人ごとに、かかった病院別、薬局別に領収書をひとまとめにします。それぞれクリップやホッチキスでまとめておくと楽である。
  2. 先ほど整理したレシートをもとに医療費の明細書に記述します。
  3. 記述が終了したら、「支払った医療費」の合計(A)と補填された金額の合計(B)を算出します。
  4. 医療費の明細書の【控除額の計算】をもとに記述します。

f:id:pgpg-sou:20140312144238p:plain

確定申告申告書Aの書き方

第一表

源泉徴収書の情報を確定申告書Aに書き写します。

f:id:pgpg-sou:20140312142700g:plain

f:id:pgpg-sou:20140312142708p:plain

アーA

⑤ーB

⑯ーC

⑱ー医療費明細書のG

⑳ー合計

㉑ー⑤ - ⑳

<㉒の税額の求め方>

㉑の金額を所得税の速算表に当てはめます。

 

税額 = ㉑ × 税率 - 控除額

例)「課税される所得金額」が500万の場合

税額 = 500万 × 0.2 - 42万7500 = 54万2500円

 

 

残りの32,34~36は申告書に従って記述していきます。

最後に

36の金額と源泉徴収のDの額を引きます。

この差分の金額が帰ってくるお金になります。

第二表

下の図のように源泉徴収書の金額と医療費明細書の金額を書き写します。 

f:id:pgpg-sou:20140312150609g:plain

f:id:pgpg-sou:20140312150623p:plain

確定申告添付書類台紙

源泉徴収書を台紙にのり付けします。

提出方法

これで必要な書類は全てそろいました。提出方法はいろいろあるのですが、今回は直接税務署に持って行くときに気をつけるべきことを紹介します。

  1. 提出する税務署は住民票がある市の税務署へ!!
  2. 書類は封筒に入れて行かなくても大丈夫!!
    今回書いた4枚の書類はわざわざ封筒に入れる必要はありません。ただ、レシートはばらけてしまうのでまとめて提出すると税務署的にはうれしいそうです。
  3. 記述に心配なことがあっても税務署で相談にのってくれる!!

参考文献

医療費控除の申告方法と明細書の書き方

医療費控除できるもの、できないもの

すぐわかる確定申告の医療控除のやり方