はてなブログから記事をエクスポートする方法

はてなブログの記事をバックアップするために、
もしくは他のサイトへ移行するときに、
はてなブログから、データをエクスポートする方法を書きます。

記事をMT(MovableType)形式でエクスポート

設定 > 詳細設定 > エクスポート > ダウンロードする」と選択していけば、記事をMT形式でエクスポートすることができます。

f:id:mi813:20151124153120p:plain

「記事のバックアップサービスと製本サービス」をクリック
f:id:mi813:20151124153305p:plain

f:id:mi813:20151124153526p:plain

f:id:mi813:20151124153654p:plain

これで、MT(MovableType)形式のテキストファイルがダウンロードできました。
ローカルパソコンへのバックアップや、WordPressへの移行にテキストデータを使うことが可能です。

sakuraのレンタルサーバーでWordPressを設定する方法

今回申し込んでみたのは、sakuraインターネットサービスのレンタルサーバー、スタンダードプランです。

sakuraのレンタルサーバーWordPressを作成するまでの手順です。

f:id:mi813:20151124140751p:plain

f:id:mi813:20151124141503p:plain

f:id:mi813:20151124141931p:plain

f:id:mi813:20151124142250p:plain

「ブログ」をクリックします。
f:id:mi813:20151124145116p:plain

f:id:mi813:20151124145429p:plain

f:id:mi813:20151124145700p:plain

f:id:mi813:20151124150025p:plain

f:id:mi813:20151124145908p:plain
レンタルサーバーのアカウントを作成したばかりだと、
WordPressへ接続できないことがあります。
接続できなければ、30分程度時間が経ってから接続すれば問題なく
WordPressに接続出来ると思います。

f:id:mi813:20151124154845p:plain


以上で、設定できました。

Rails Tutorialをやってみよう07

第6章 ユーザーのモデルを作成する

6.1 Userモデル

第6章 ユーザーのモデルを作成する | Rails チュートリアル


Gitでバージョン管理を行なっているのであれば、このタイミングでユーザーをモデリングするためのトピックブランチを作成しておいてください。

$ git checkout master
$ git checkout -b modeling-users

gitがどのように記録されているかわからなくなったら

$ git log

でgitの記録を見てみましょう。

ちなみにgit logは、"q"で終了して、元のコマンドラインに戻ることができます。

では、引き続き、ユーザーモデルを作成していきます。
userモデルを作成していきます。

userのデーターベースをイメージします。
http://railstutorial.jp/books/4.2/images/figures/users_table.png

userのデータモデルのスケッチです。
http://railstutorial.jp/books/4.2/images/figures/user_model_sketch.png

まず、userのコントローラーを作成します。

$ rails generate controller Users new

コントローラーの作成には、
rails generate controller <大文字かつ複数形> new
というメソッドを使います。

次に、userのモデルを作成します。
このときに、データモデルのスケッチの属性を付属させて作成します。
id属性は自動で作成されます。

$ rails generate model User name:string email:string

モデルの作成には、
rails generate model <大文字かつ単数形> <属性名>:<データ形式> <属性名>:<データ形式>
というメソッドを使います。

generateコマンドの結果のひとつとして、マイグレーションと呼ばれる新しいファイルが生成されます。マイグレーションは、データベースの構造をインクリメンタルに変更する手段を提供します。

db/migrate/[timestamp]_create_users.rbが作成されています。
t.timestamps null: falseも同時に作成されています。
このt.timestamps null: falseがあることで、
created_atとupdated_atが自動作成されます。
この2つはユーザーが作成または更新された時の時刻を記録するタイムスタンプを記録します。

マイグレーションは、以下のようにrakeコマンドを使って実行することができます。

$ bundle exec rake db:migrate

SQliteのデータベース構造を可視化する方法

SQLiteBrowserをインストールします。
DB Browser for SQLite

macでhomebrewを使ってインストールする場合は、以下のbrew caskコマンドでインストールできます。

$ brew cask install sqlitebrowser

RubyMineを使っている場合は、このブログを参考にしてください。mi813.hatenablog.com

6.1.2 modelファイル
6.1.3 ユーザーオブジェクトを作成する
$ rails console --sandbox

sandboxモードでrailsを起動します。
sandboxモードでrails consoleを起動すると、
データ・モデルを変更せずに調べることができます。
rails consoleは、"control + d"にて終了できます。

>> user = User.new(name: "Michael Hartl", email: "mhartl@example.com")

nameとemail属性が期待通り設定されていることがわかります。

>> user.valid?
true
>> user.save

   (0.1ms)  SAVEPOINT active_record_1
  SQL (3.2ms)  INSERT INTO "users" ("name", "email", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["name", "Michael Hartl"], ["email", "mhartl@example.com"], ["created_at", "2015-11-23 03:36:30.051170"], ["updated_at", "2015-11-23 03:36:30.051170"]]
   (0.1ms)  RELEASE SAVEPOINT active_record_1
=> true>

saveメソッドは、成功すればtrueを、失敗すればfalseを返します (現状では、保存はすべて成功するはずです。

>> user
=> #<User id: 1, name: "Michael Hartl", email: "mhartl@example.com",
created_at: "2014-07-24 00:57:46", updated_at: "2014-07-24 00:57:46">

f:id:mi813:20151123123937p:plain

以下の3つのタイトルでは、データ・モデルの変更をrails consoleにて編集するやり方が記載されています。
6.1.3 ユーザーオブジェクトを作成する

6.1.4 ユーザーオブジェクトを検索する

6.1.5 ユーザーオブジェクトを更新する


取りあえず、テストは飛ばして次に進みます。

Ruby正規表現を試すことが出来るWebサービスwww.rubular.com


メールフォーマットを正規表現で検証する (GREEN app/models/user.rb)

class User < ActiveRecord::Base
  validates :name,  presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX }
end

既に存在するモデルに構造を追加する

$rails neerate migration add_index_to_user_email

f:id:mi813:20151123130043p:plain


メールアドレスの一意性を強制するためのマイグレーション db/migrate/[timestamp]_add_index_to_users_email.rb

class AddIndexToUsersEmail < ActiveRecord::Migration
  def change
    add_index :users, :email, unique: true
  end
end
$ bundle exec rake db:migrate

Userのデフォルトfixture RED
test/fixtures/users.yml

# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/
# FixtureSet.html

one:
  name: MyString
  email: MyString

two:
  name: MyString
  email: MyString

上記のファイルを空にしておきます。
空のfixtureファイル GREEN test/fixtures/users.yml

# empty


email属性を小文字に変換してメールアドレスの一意性を保証する GREEN app/models/user.rb

class User < ActiveRecord::Base
  before_save { self.email = email.downcase }
  validates :name,  presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
end

6.3.1 ハッシュ化されたパスワード
セキュアなパスワードの実装は、has_secure_passwordというRailsメソッドを呼び出すだけでほとんど終わってしまいます。このメソッドは、Userモデルで次のように呼び出せます。
app/models/user.rb

class User < ActiveRecord::Base
  .
  .
  .
  has_secure_password
end

のようにモデルにこのメソッドを追加すると、次のような機能が使えるようになります。

・セキュアにハッシュ化したパスワードを、データベース内のpassword_digestという属性に保存できるようになる。
・2つのペアの仮想的な属性18 (passwordとpassword_confirmation)が使えるようになる。また、存在性と値が一致するかどうかのバリデーションも追加される。
・authenticateメソッドが使えるようになる (引数の文字列がパスワードと一致するとUserオブジェクトを、間違っているとfalse返すメソッド)。

この魔術的なhas_secure_password機能を使えるようにするには、1つだけ条件があります。それは、モデル内にpassword_digestという属性が含まれていることです。

http://railstutorial.jp/books/4.2/images/figures/user_model_password_digest_3rd_edition.png


http://railstutorial.jp/books/4.2/images/figures/user_model_password_digest_3rd_edition.png

データモデルにするために、まずはpassword_digestカラム用の適切なマイグレーションを生成します。マイグレーション名は自由に指定できますが、上のように末尾をto_usersにしておくことをお勧めします。こうしておくと、usersテーブルにカラムを追加するマイグレーションRailsによって自動的に作成されるからです。add_password_digest_to_usersというマイグレーションファイルを生成するためには、以下のコマンドを実行します。

$ rails generate migration \
add_password_digest_to_users password_digest:string

f:id:mi813:20151123131926p:plain

usersテーブルにpassword_digestカラムを追加するマイグレーション db/migrate/[timestamp]_add_password_digest_to_users.rb

class AddPasswordDigestToUsers < ActiveRecord::Migration
  def change
    add_column :users, :password_digest, :string
  end
end
$ bundle exec rake db:migrate

has_secure_passwordを使ってパスワードをハッシュ化するためには、最先端のハッシュ関数であるbcryptが必要になります。パスワードを適切にハッシュ化することで、たとえ攻撃者によってデータベースからパスワードが漏れてしまった場合でも、Webサイトにログインされないようにできます。サンプルアプリケーションでbcryptを使用するために、bcrypt-ruby gemをGemfileに追加します

bcryptをtGemfileに追加する

source 'https://rubygems.org'

gem 'rails',                '4.2.2'
gem 'bcrypt',               '3.1.7'
.
.
.
6.3.2 ユーザーがセキュアなパスワードを持っている

Userモデルにpassword_digest属性を追加し、Gemfileにbcryptを追加したことで、ようやくUserモデル内でhas_secure_passwordが使えるようになりました。

Userモデルにhas_secure_passwordを追加する RED app/models/user.rb

class User < ActiveRecord::Base
  before_save { self.email = email.downcase }
  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
  has_secure_password
end
bundle exec rake test


空のパスワードを入力させないために、存在性のバリデーション (6.2.2) も一緒に追加します。結果として、Userモデルのコードはリスト6.39のようになります。(has_secure_passwordメソッドは存在性のバリデーションもしてくれるのですが、これは新しくレコードが追加されたときだけに適用されます。したがって、たとえばユーザーが " " (6文字分の空白スペース) といった文字列をパスワード欄に入力して更新しようとすると、バリデーションが適用されずに更新されてしまう問題が発生してしまいます。)

セキュアパスワードの完全な実装 GREEN app/models/user.rb

class User < ActiveRecord::Base
  before_save { self.email = email.downcase }
  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
  has_secure_password
  validates :password, presence: true, length: { minimum: 6 }
end

6.3.4 ユーザーの作成と認証

ユーザーモデルの基本部分が完成しました。
データベースに新規ユーザーを1人作成しましょう。

$ rails console
>> User.create(name: "Michael Hartl", email: "mhartl@example.com",
?>             password: "foobar", password_confirmation: "foobar")
=> #<User id: 1, name: "Michael Hartl", email: "mhartl@example.com",
created_at: "2014-09-11 14:26:42", updated_at: "2014-09-11 14:26:42",
password_digest: "$2a$10$sLcMI2f8VglgirzjSJOln.Fv9NdLMbqmR4rdTWIXY1G...">

f:id:mi813:20151123133113p:plain

RubyMineのデータベースで確認してみると、rails consoleで作成したデータが記録されているのが確認できます。
f:id:mi813:20151123133329p:plain


コンソールに戻ってpassword_digest属性を参照してみると、has_secure_passwordの効果を確認できます。

>> user = User.find_by(email: "mhartl@example.com")
>> user.password_digest
=> "$2a$10$YmQTuuDNOszvu5yi7auOC.F4G//FGhyQSWCpghqRWQWITUYlG3XVy"

RubyMineのデータベースを可視化する

SQLite形式で作成したデータベースをRubyMineを使って可視化する方法を紹介します。

f:id:mi813:20151123113648p:plain

f:id:mi813:20151123114028p:plain

f:id:mi813:20151123114148p:plain

f:id:mi813:20151123114806p:plain


SQLiteのXerial driverがない場合は
インストールしましょう。
f:id:mi813:20151123115122p:plain


テストコネクトをしてみます。
f:id:mi813:20151123115335p:plainf:id:mi813:20151123115357p:plain
テストが成功したので、
OKボタンを押して、接続します。

f:id:mi813:20151123115534p:plain

右クリックでdiagramsを選択して、ER図を表示させることができます。
f:id:mi813:20151123144134p:plain


これで、データモデルを可視化出来るようになりました。

RubyMineのショートカット

RubyMineのショートカットを覚えたものから、紹介していきます。 macのショートカットです。

参考: Most indispensable RubyMine keyboard shortcuts.

RubyMine 8.0 Help :: Keymap

キーバインド 内容 おすすめ度
command+control+up(↑矢印) view, controller, helper, test間を相互移動する ☆☆
Tab コード補完 ☆☆☆
⌘ + Shift + o ファイル検索 ☆☆☆
command + shift + N ファイル名による検索 ☆☆☆
⌘ + Shift + . ERB式を出力 ☆☆☆
⌘ + Shift + v Paste履歴から貼り付け ☆☆
⌘ + Shift + [ 右タブへ移動 ☆☆
⌘ + Shift + @ 左のタブへ移動 ☆☆
command + shift + a 対応するコントローラ、ビュー、テストを表示 ☆☆☆
⌘ + Ctl + l コードフォーマット ☆☆☆
Shift + alt(optionキー) 行を移動 ☆☆
alt + F7 ソース内で他に使ってるところを検索してくれる ☆☆
⌘ + 6 TODOの一覧表示 ☆☆
command+shift+e 最近編集したファイルの一覧 ☆☆☆
command + / コメントイン、コメントアウト ☆☆☆

他に使うものが増えたら、随時更新していきます。

macでRealforceのKeyboardを使う時の設定

東プレのKeyboard、「RealForce」をmac OSX Yosemiteで使う時の設定です。
こちらのブログを参考にさせていただきました。

参考ブログ:
RealForceキーボードをMacで使うための覚書 · Yoshi's Notes


mac純正の環境設定だけでは、「英数」と「ひらがな」との変換もうまくできません。

1.KarabinerとSielのインストール

Karabinerと、Sielをインストールするとキーのポジションや機能を変更できるようになります。
まず、この2つをインストールしましょう。
1.karabiner (旧KeyKeyRemap4MacBook)をインストールします。
2.Siel(旧PCKeyboardHack)をインストールします。

2.Sielの設定

f:id:mi813:20151119140652p:plain

f:id:mi813:20151119150807p:plain
NFER=not transfer=無変換:スペースキーの左側にあるキーです。PC/AT互換機用の109キーボードでは「無変換キー」が対応します。
XFER=transfer=変換(transをxと略記することがある):スペースキーの右側にあるキーです。PC/AT互換機用の109キーボードでは「変換キー」が対応します。
KATAKANA key = "KANA"とRealForceキーボードに表示されているキーです。


3.Karabinerの設定

Karabinerの設定ファイルの書き方(英語)を参考に
独自の設定を作成することが可能です。

キー設定を書いた.xmlファイルは、以下の図から読み込ませることができます。
f:id:mi813:20151119135826p:plain

ファイルを読み込ませたら、Karabinerをリロードします。
f:id:mi813:20151119140059p:plain

xmlファイルをいろいろ設定して、自分なりに使いやすくしてみてください。

mac book pro 15inch用に外付けKeyboardを購入(RealForce)

mac book proの外付けKeyboardを購入しました。
PCは、ずっとノート派だったので、ノートパソコンのKeyboardを使っていました。使っていたmac book proを13inchから15inchへ変更したら、純正のKeyboardに打ちづらさを感じ、外付けKeyboardの購入を検討しました。

1.

Apple Wireless Keyboard (JIS) MC184J/B

Apple Wireless Keyboard (JIS) MC184J/B

何はともあれ、まずは純正のKeyboardを購入しようかと迷いました。
このKeyboardのメリットは、2つあると思います。
(1)ノートPCのKeyboardと同じくらいキーストロークが短く、ノートPCのKeyboardを使い慣れていたら移行がスムーズです。
(2)最大の魅力は、macOSXと、IphoneIpadなどのIOSデバイスへの接続がスムーズにできることです。
1,000円前後の格安Keyboardと比べると、値段が高めです。


2.

純正Keyboardに比べてを値ごろ感のある製品です。
IOSAndroidにも対応しています。
Ipad用にKeyboardが欲しい場合や
キーの打鍵感覚や、入力速度に特にこだわりが無ければ、こちらでも良いと思います。


3.

Happy Hacking Keyboardの値段の高い方です。静電容量無接点方式というキーを採用しているそうです。
キー入力の操作に独特の癖がありますが、macでも十分に使える製品です。
値段は高いですが、生産性は向上するので、購入しても損は無い製品だと思います。
購入後、細かなキー設定は必要ですがmacでも使えるようです。


4.

Happy Hacking Keyboardの値段が安い方です。
静電容量無接点方式ではなく、普通のメンブレン方式です。
キー配列がmac用というのが良いです。

個人的には、安い方のHappy Hacking Keyboardでも十分使えると思いますが、
友人に言わせると、「どうせHappy Hacking Keyboardを買うなら、思い切って高い方のProfessionalを買うべき!打鍵の感触が段違いに良い」とのことです。


5.

東プレ NG01B0 REALFORCE91UBK

東プレ NG01B0 REALFORCE91UBK

迷いに迷った挙句に購入したのは、RealforceのKeyboardでした。
決め手は、Happy Hacking Keyboardより価格が1万円ほど安いことと、
ファンクションキーが揃っているので、WindowsLinuxでも十分使えることです。
最終的に、店頭にてHappy Hacking Keyboardと打ち比べをしてみて、
キーポジションが微妙にこちらの方が気に入りました。


6.

RealforceHappy Hacking KeyboardKinesis Freestyle2 for macの3つで悩みに悩みました。
写真リンク先はWindows用のKeyboardです。ご注意ください!
mac用のKinnesis Freestyle2は、Kinesisの英語サイトから購入可能です。
ただしアメリカからの輸入になるので、送料が高く付きます。
あと試し打ちが出来るお店が見当たらなかったので、残念ながら購入を見送ることにしました。

入力しやすいKeyboardを手に入れると
キー操作が楽になり、打鍵ミスが減り、集中力も上がるので、結果として生産性が20%くらい向上するのと感じています。