cpanm Safeでインストールしようとするとテストでエラーとなって失敗しました。
対処法わからず。。。
Running Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Safe
Writing MYMETA.yml and MYMETA.json
-> OK
Checking dependencies from MYMETA.json ...
Checking if you have ExtUtils::MakeMaker 0 ... Yes (6.68)
Building and testing Safe-2.35
cp Safe.pm blib/lib/Safe.pm
Manifying blib/man3/Safe.3pm
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/safe1.t .......... ok
t/safe2.t .......... ok
t/safe3.t .......... ok
Possible unintended interpolation of @INC in string at /usr/lib64/perl5/DynaLoader.pm line 90.
# Failed test 'Can load version.pm in a Safe compartment'
# at t/safeload.t line 26.
# Unable to create sub named "*Safe::Root0::version::vxs::numify" at /usr/local/lib64/perl5/version.pm line 48.
# Compilation failed in require at (eval 11) line 1.
# BEGIN failed--compilation aborted at (eval 11) line 1.
# Looks like you failed 1 test of 3.
t/safeload.t .......
Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/3 subtests
t/safenamedcap.t ... ok
t/safeops.t ........ skipped: PERL_CORE unset
t/saferegexp.t ..... ok
t/safesort.t ....... ok
t/safeuniversal.t .. ok
t/safeutf8.t ....... ok
t/safewrap.t ....... ok
Test Summary Report
-------------------
t/safeload.t (Wstat: 256 Tests: 3 Failed: 1)
Failed test: 1
Non-zero exit status: 1
Files=11, Tests=98, 1 wallclock secs ( 0.04 usr 0.02 sys + 0.53 cusr 0.08 csys = 0.67 CPU)
Result: FAIL
Failed 1/11 test programs. 1/98 subtests failed.
make: *** [test_dynamic] Error 255
-> FAIL Installing Safe failed. See /root/.cpanm/work/1592328454.16336/build.log for details. Retry with --force to force install it.
どこに書くか
blogを書き始めようとするときに、まずはどこに書くかを決める必要があります。
世界中で人気のWord Pressというソフトウェアを使う手もありますが、ややニッチ(?)なMovable Typeというソフトウェアもあります。 Movable TypeはSix Apartという会社が開発しているソフトウェアで、商用ブログサービスとしてType Padというものもあります。 私はMovable Typeに書くことにしているのでMovable Typeを使います。
何で書くか
Movable
TypeはWebインタフェースがあるので、ブラウザで書くのが通常ですがブラウザのテキストフォームに書くような形になるので使いづらいです。使いやすくするにはjavascriptを書いて機能拡張するなどの工夫が必要です。しかし、世の中には文章を書くためのツールとしてエディタがいくつもあり、それらを使う方が文書を書くには都合が良いのです。当たり前ですね。Movable
TypeにはWebのGUIインタフェース以外にWeb APIも提供しています。このWeb
APIはData APIという名前で定義されていて、これを使うと記事の新規作成や編集なども行えます。
そういうわけで、エディタで書いた文章をData APIを使ってMovable
Typeに投稿する仕組みが実現できそうです。
これができればエディタで気持ちよく文章を書いて、そのままMovable
Typeのblogエントリとして投稿できるはずです。
欠点があるとすれば、写真などの画像を入れようとすると難しくて、WebのGUIインタフェースの方が直感的に配置できたり、アップロードもできるので操作性は上です。
ですので、画像の取り扱いはWeb
GUI、文字はエディタと使い分けることにします。
さて、エディタで書いた文章をData APIを使ってMovable
Typeに投稿しようと思いますが、どのような操作性が良いでしょうか。
気軽に編集できるようにするには、エディタでテキストファイルを保存するような操作でData
APIを使って投稿できる、修正できるというのが良いでしょうか。
ローカルに編集したり、Data
APIを使って編集を反映したりと使い分けられるようにするのも手です。
とりあえずはローカルにあるファイルを編集し、上書き保存すると、Data
APIを使ってMovable
Typeの記事も編集(変更)されるという仕組みを目指します。
足りない機能
エディタでファイルを保存すると自動的にData
APIにアクセスする仕組みを実現する必要が出てきました。
自動で行うというのがポイントですが、そのためには以下のような方法が考えられます。
- ファイルの更新チェックをリアルタイムで行うようにカーネルフックモジュールを用意する
- ファイルの更新チェックを行うデーモンを用意する
- エディタの保存処理をフックする仕組みを用意する
カーネルフックモジュールで実装すると、色々と無駄で遅くなりそうです。
デーモンを用意するのも大げさな感じですし、無駄な感じです。
そこで今回はエディタの保存処理をフックする仕組みを用意することにします。
保存処理をフックできるようなエディタはいくつもありますが、筆者はvimが好きなのでvimを採用します。
vimはemacsと同じく拡張が用意で基本的になんでもできます。
vimの場合は、vim
scriptという形で保存処理をフックする仕組みを記述すれば実現できます。 vim
の設定ファイルはvimrcに記述しますが、この設定ファイルもvim
script形式です。
そのため、vimrcに保存処理のフックすく仕組みを書けば解決できますが、その仕組みが巨大であったり、汎用的にできたり、公開したい場合にはプラグインとして作成することもできます。
今回はMovable
Type利用者でかつ、vim利用者のためのプラグインを作成することにします。
足りない機能を補う
vim プラグインに必要な機能はData
APIへのアクセスに関するものと、ローカルファイルの取り扱いに関するものに分けられます。
Data
APIはHTTPアクセスなのでHTTPリクエストとレスポンスの取り扱いが必要です。
この部分はvital.vimを使います。
ローカルファイルの取り扱いは自分で用意します。
Data
APIで取得したエントリはJSON形式で取得できますが、それをローカルファイルに保存する前にエディタで編集しやすい形に整形する必要があります。
また、その逆にローカルファイルの内容をData
APIで投稿する際には逆の整形を行う必要があります。
こうした処理をちまちま書いていくといずれ出来上がります。
プラグインの処理の詳細は別の記事に書きますので、そちらを参照してください。
作成中の vim プラグイン vim-mtdataapi
記事を投稿する
プラグインが完成したら、ようやく記事を投稿できます。 長い道のりでした。
以下に従ってTweetボタンを設置してみた。
Tweet Button
https://publish.twitter.com/を使うと簡単にhtmlコードを生成できるので、簡単だった。
mtdataapiというvimのpluginからMovable Typeへの記事投稿の際、markdown形式で投稿できるようにしました。 変換にはpandocを使っています。
mtdataapi
先日の記事でMovable Typeのドキュメントのバグを見つけたのでフィードバックを行ったところ、すぐに対応して修正してもらえました。
https://movabletype.atlassian.net/browse/FEEDBACK-1309
フィードバック方法
以下のURLから内容を投稿するだけです。
ユーザ名やメールアドレスは公開情報となるので記入必須ではないようです。
メールアドレスを登録するとその後の対応が通知されます。
https://www.sixapart.jp/movabletype/feedback.html
Movable Type というCMSを使ってブログを書いていますが、基本的にブラウザで入力するため文章入力が非効率に感じることが多々あったので、vimから投稿できるようにvim pluginを開発しています。
単純な更新ができるようになってきたので、一旦githubに公開しましたが、とても一般の方が使える状態ではありません。
需要があるようでしたら、issueやSNSなどで連絡もらえると嬉しいです。
Movable Type 用 Vim Plugin: mtdataapi.vim
以下のマニュアルを参照してMovable Type 7のData API v4 の authentication を試したが、なかなかうまくいかなかった。
原因は clientId の I が小文字になっていたためだった。
マニュアルの例のところが小文字になっていたのでそれを参考にしていたのが間違い。
マニュアル