Spica*

プログラミングの話。

CLIでのWordpressのドメイン移行方法

Wordpressのお引っ越しについて

Wordpressにおいて、下記のようにお引っ越しをすることがよくあります。

  • サイトを引っ越しする際
  • ローカルで動かしていたサーバをリモートへデプロイする際

ただ、このように別ドメインへ移行する際、

  • ファイルを全てそっくりそのままコピー
  • 移行元のDBのデータをエクスポートして、移行先でインポート

という手順を踏んでも、移行先でそのまま動作しません。これは、ドメイン名がデータベースの中に入り込んでいるせいなのですが、この問題自体は検索すると詳しい手順がたくさんヒットします

殆どの記事はよく出来ていて困らないと思うのですが、SSH使える人であればもう少し簡単に移行出来るのになと思ったので、メモしておきます。

なぜこの記事を書いたか

移行方法を検索するとよく出てくるのは、こちらのツールを使用する方法です。

https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

検索した時に出てくる方法だと、このツールをWebから見れるようにデプロイして移行する方法が多く取られているようにみえました。しかしこのツール、コマンドラインのインターフェースも用意されているので、僕的にはその方がメリットあるなと思ったので書き残しておこうかなと思った次第です。

メリットあると思った理由は以下の通り。

  • 誰でもアクセスできる場所にさらされる期間がないため、セキュリティリスクが低い
  • cliは文字のため、どのような引数を指定して移行したのかをまるごと記録として残せる
  • ダウンロードしてすぐに実行出来るので、煩雑さがない

お引っ越し方法

  • 先程のツール のContributionsセクションに書かれてある、 GitHubのURL からアクセス
    • アクセスする前に、きちんと Download Search Replace DB セクションの内容は読んでおきましょう。
    • 2017/10/16現在、emailアドレス入力→ダウンロードした時と、git-cloneした時のものの内容は同じようです。
  • 移行先のサーバへSSHで接続し、 git clone https://github.com/interconnectit/Search-Replace-DB.git する
    • git-cloneする場所はどこでもいいです。DocumentRoot以下は避けましょう
  • cd Search-Replace-DB する
  • move.sh 等の名前でファイルを作成し、その中に下記のスクリプトを入力
php srdb.cli.php \
  --host localhost \
  --name <データベース名> \
  --user <ユーザー名> \
  --pass <パスワード> \
  --search "<移行元ドメイン>" \
  --replace "<移行先ドメイン>" \
  --dry-run

引数の詳細は https://github.com/interconnectit/Search-Replace-DB#cli-script を確認してください。

  • . ./move.sh を実行
    • --dry-run がついているので、実際にはまだ実行されません
    • ここでどれだけのクエリが実行されるかを確認できる
  • move.sh を再度開き、 --dry-run を削除
  • 再度 . ./move.sh を実行
    • 実際にクエリが実行されます
  • 移行先ドメインへアクセスして動作しているかを確認

その他

  • PHP 7.1.8 (cli) を使って移行したところ、PHP Noticeがでました。が、移行は正常にできました。 (Issueはこちら)
Notice: A non well formed numeric value encountered in /path/to/Search-Replace-DB/srdb.cli.php on line 202

Call Stack:
    0.0012     387272   1. {main}() /path/to/Search-Replace-DB/srdb.cli.php:0
    0.0050     526432   2. icit_srdb_cli->__construct() /path/to/Search-Replace-DB/srdb.cli.php:227
    0.0092     544968   3. icit_srdb_cli->replacer() /path/to/Search-Replace-DB/srdb.class.php:337
    0.5026     642544   4. icit_srdb_cli->log() /path/to/Search-Replace-DB/srdb.class.php:995

VimFxではてなブックマーク

[2017-06-01 18:23 追記] 公式のブックマークレット、内部でhttp呼んでるからhttpsで使えない(Mixed Contentになる)!!だめじゃん!!ということでこの記事は早くも消費期限切れです

前に導入記事に加えてこれ書いたんですけど、その時はショートカットで新しくウィンドウを開いて、ブックマークさせる感じでした。で、よく考えたらブックマークレット実行してあげたほうが良いじゃんって思ってエントリ書いてます。

ちなみになんでFirefox拡張使わないのかというと、現状それ入れるとe10sが無効になるからです。

導入

下記をそれぞれconfig.js/frame.jsに入れます。

config.js

vimfx.addCommand({
  name: 'open_hatena_bookmark_entry',
  description: 'Open Hatena Bookmark Entry',
}, ({vim}) => {
  vimfx.send(vim, 'openHatena', {}, () => {});
});


let map = (shortcuts, command, custom=false) => {
  vimfx.set(`${custom ? 'custom.' : ''}mode.normal.${command}`, shortcuts)
}

map('cc', 'open_hatena_bookmark_entry', true);

frame.js

vimfx.listen('openHatena', (params, callback) => {
  var document = content.document;
  // Hatena ブックマークレットの中身
  // https://www.hatena.ne.jp/tool/bookmarklet
  (function() {
    var d = (new Date);
    var s = document.createElement('script');
    s.charset = 'UTF-8';
    s.onload = callback;
    s.src = 'https://b.hatena.ne.jp/js/Hatena/Bookmark/let.js?' + d.getFullYear() + d.getMonth() + d.getDate();
    (document.getElementsByTagName('head')[0] || document.body).appendChild(s);
  })();
});

React Nativeとionic2

この記事書きながら調査。ある程度調査した後気づいたけど、ReactNative、WebView上で動かない意味でアーキテクチャ全然違うので比較として微妙だ…。

認識あってるんかなー

Lilypond用テキストファイルを修正したらすぐにビルドするやつ書いた

https://gist.github.com/esperia/b11a9ee01725832194f45dee2546745b

使い方は中に書きました。

以前紹介したようなdockerimageを使って、ファイルの変更があったら自動的にビルドするように実装しました。

大げさなものではなく、gulp.watchを使ってファイルの変更検知をした後、コマンドを実行するだけのものです。

Lilypond入門した

きれいな楽譜が書きたいけど、FinaleNotepadが扱いにくすぎてやめたのでこっち使うことにした。 高校のころMML書いてたので、性にあってるかなーとか勝手に思ってる…

始め方1 LilyBin

一番簡単なのは、 LilyBinを使うことです。これはブラウザベースでLilypondを使えるサービスです。なので、開くだけですぐに楽譜がかけます。

ただ、楽譜公開する予定とかなければ、なるべくオフラインでしておきたいところです。

始め方2 Docker image

で、僕はMacをよく使うんですが、普通にやるとdependenciesのインストール数が多すぎて、インストールの時間とか容量とか大変なことになります。Homebrew入れている人は brew info homebrew/tex/lilypond して頂くと気持ちが分かるかなと…

==> Dependencies
Build: pkg-config ✔, libtool ✘, flex ✘
Required: gettext ✔, pango ✘, ghostscript ✘, mftrace ✘, fontforge ✘, fondu ✘, texinfo ✘, libffi ✘, libunistring ✘, bdw-gc ✘, gmp ✘, readline ✔
==> Requirements
Required: tex ✔, x11 ✔

なので、とりあえず始める方はDocker使うのがオススメです。Docker Hubに、Lilypondの環境が一式入ったDocker Imageがありますので、これを使いましょう。

https://hub.docker.com/r/markauskas/lilypond/

まずは、Dockerをインストールして、 docker pull markauskas/lilypond しましょう。

その後、下記を test.ly としてローカルに保存し、

\version "2.16.2"
\relative c' {
  c d e f g a b c
}

下記のプログラムで実行します。

docker run --rm -v $(pwd):/app -w /app markauskas/lilypond lilypond test.ly

するとPDFとmidiができると思います。この手順は先程のDockerHubへのリンク内でも考慮されています。

エディタについて

僕はまだ始めたところなので、エディタに関してはまだ未調査です。

調べてみたい場合は、ググるか、より簡単な編集手段より、各種エディタをチェックしてみて下さい。見た感じ完全なMac向けは少ない感じします。

僕は今のところvimを使っています。プラグインは、vim-lilypond-integrator を使っています。プラグイン管理はdein.vimを使用。

はじめよう

とりあえず下記は順に見ておいて損はないです。

さらに詳しく見る場合は、記譜法リファレンスが良いかもです。

おわり

まだ僕もlilypond入門したところなんですが、それはインストールでかなり時間使ってしまったからなのです。なので始める人が居たら、そのハードルが少しでも下がってくれることを願うばかりです。

Dockerの方法も、バージョンとか上げるときどうすんのよ、とか調査できていないので、本当はもうちょっと調べたいところです…。

VimFxを導入した

Vimperatorがe10sにまだ対応しなくて、Firefox重くてつらくてChromeに移行したけど、

Vimium設定が微妙にかゆいところ届かなくて困ってて、

Yet another like vimなブラウザ操作の何かを探してたところ、VimFxと出会った。

はてなブックマークアドオンもe10sまだ対応していない(よね?)ので、とりあえずその辺のconfigいじれるかやってみたらできたので、ブログ書いておくなど。

VimFxについて

VimFxのすばらしい解説があったのでこちら必読。

tonkuma.hatenablog.com

コンフィグの有効化

ここに基本的な流れが書いてあるけど、少し悩んだのでブログ書いておく。

環境はMac OS X (Yosemite)。

github.com

  1. ~/.config/vimfxディレクトリを作る。
  2. ~/.config/vimfx/config.js, ~/.config/vimfx/frame.js という二つのからファイルを作る。
  3. about:config 画面を開き、 extensions.VimFx.config_file_directory の項目を探す
  4. この項目の値を ~/.config/vimfx とする
  5. 変更したら about:config は閉じておk
  6. 適当なタブでキーバインド gC を実行する(g を押した後続けて C を押す)。
  7. すると、右下に「設定ファイルの再読み込みに成功しました」と出る。
  8. ~/.config/vimfx/config.js に下記のプログラムを入力する。入力できたら再度 gC で再読み込みして、 ccはてブURL開く。
vimfx.addCommand({
  name: 'open_hatena_bookmark_entry',
  description: 'Open Hatena Bookmark Entry',
}, ({vim}) => {
  let location = new vim.window.URL(vim.browser.currentURI.spec)
  vim.window.gBrowser.loadURI(`http://b.hatena.ne.jp/entry/${encodeURIComponent(location.href)}`)
})

let map = (shortcuts, command, custom=false) => {
  vimfx.set(`${custom ? 'custom.' : ''}mode.normal.${command}`, shortcuts)
}

map('cc', 'open_hatena_bookmark_entry', true)

VimFx良い!

思うところ

とりあえず、VimFxのおかげでまたFirefoxユーザに戻れそうで嬉しい。

Vimperatorがダメになったんではないんですよ。僕がタブ開きまくる使い方してるせいだったり、Webの仕組みが複雑化しすぎて、シングルプロセスだと回らなくなったのが原因なんですよ!VimpVimpで、消費メモリ少ないとかシングルプロセスで動くモノだから良いところもあって、批判するつもりなんかさらさらなくて感謝の念しか無い。ただ、時代が変わりすぎて則せなくなっただけなんですよね…?

E4Xが死んだあたりで、もうVimp的にもVimp-plugins的にもつらたんなのにe10s対応ですもんね…。まだ見てないですけど今はWebExtensions推しなんでしたっけ。アドオンは古くなっても自分は古くなりとうないですね。

CentOS7でblender実行するまで

blenderコマンドラインから使えるっぽい感じだったのでインストールしてみた。

僕の場合二回エラーが出た。

./blender: error while loading shared libraries: libGLU.so.1: cannot open shared object file: No such file or directory

sudo yum install mesa-libGLU-devel で解決。

./blender: error while loading shared libraries: libXi.so.6: cannot open shared object file: No such file or directory

sudo yum install libXi-devel で解決。