日本語とプログラミング

Hexo は基本的にはタイトルの名前をファイル名にして保存し、そのファイル名をURLに割り当てている。
もちろん、設定で変更できる。

先程の記事のタイトルの何がいけなかったのかはわからないけど、デプロイしたあと確認してみると、404エラーになっていた。
今は変更したので正常にリンクできる。

「WordPressの記事をHexoにインポートしようとしたが挫折した」の何がいけないのだろう?

元々、URLに日本語が入っているのは気持ち悪いので設定を変えたいと思っていたのだけど、設定を変更するとよくわからないエラーになるし、調べても今一つな感じでした。

救いなのは、ファイル名を変更すれば、そのファイル名がURLになるので、ファイル名を変更するのが安全な方法というのがわかった。

なので、 Perl を使ってポストの時間からファイル名を生成するようにした。

tools/rename_posts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env perl
use utf8;
use strict;
use warnings;
use Path::Tiny qw(path);
use YAML qw(Load);
use Time::Moment;
my $root = path(__FILE__)->absolute->parent(2);
# 記事を取得
my @posts = path($root, 'source', '_posts')->children;
# 記事から時間を取得して、名称変更
for my $post (@posts) {
my ($yaml) = split /\n---/, $post->slurp_utf8;
my $info = Load($yaml);
my $date = join('T', split(/\s/, $info->{date})) . '+09';
my $tm = Time::Moment->from_string($date);
my $basename = $tm->strftime('%Y%m%d%H%M%S');
my $new_post = path($post->parent, qq{$basename.md})->absolute;
$post->move($new_post->stringify);
}

デプロイの前に自動的に実行するようにしておいた。

npm でもコマンドが作れるみたいだけど、いつも使っているので daiku で。

Daikufile
1
2
3
4
5
6
desc 'deploy';
task deploy => sub {
sh qw{hexo clean};
sh qw{tools/rename_posts};
sh qw{hexo deploy};
};

こうすることで、記事を書いたあと、 daiku deploy すればサイトを更新できるようになった。