以前WordPressで構築していたサイトが頻繁に落ちていることについて記事にしたが、adiaryに変えてからどうなったかというと、恐らく落ちなくなったと思う。
何故そう思ったかだが、今までGoogleにインデックスさせるときは毎回Search Consoleから手動登録していたが、そんなことをしなくても勝手にインデックスしてくれるようになったからだ。BingにもIndexNowを使わずとも勝手にインデックスされている。いや、BingのクローラーについてはIndexNowの有無による差を検証したことがないので有意に改善しているかは正直不明だが…w
少なくともこれでインデックスされやすくなり、以前よりアクセスしやすくなることだろう。読み込み時間が0.3秒変わるだけでブラウザバックが減るとかいう話も昔どっかで読んだ気がするし、0.3秒どころか6秒くらい改善してそうなので、効果はかなり期待できると考えている。
Markdownのレンダリングについても作者に要望を出しまくったので大分改善した。とはいえ、まだ問題点は残るので、そこはMarkdown parserを自作する事で上手いことやっていきたいと思う。結果としてadiaryへの乗り換えは大成功だったといえる。
adiaryは非常に素晴らしいCMSだと思うので、WordPressを使っていて重さに悩む人や、CDNなどの費用を節減したい人は検討されてもいいのではないだろうか?WordPressのように素晴らしいテーマや有益なプラグインは存在しないが、なければ作ればいいので、そういう気概のある人には非常にお勧めできると思う。
また本体やプラグイン、テーマが勝手にアップデートされることがないので「何もしてないのに壊れた」が起きないのもいいところだ。当然、その分の保守能力はサイト管理者に求められるが、本来ホームページ運営というのはそういうものである。一定のリテラシーがないとできないのは当然のことだ。少なくとも昔のインターネットでは常識だった筈だ。
何よりこのCMSは日本製だ、日本人なら日本製に拘ってみるというのもありだろう。
改善の余地は山ほどあると思うので、最近開発から遠ざかっていた人にも大変お勧めできる。adiaryはOSSなので、コントリビュートするのもよし、フォークするのもよしだ。逆にシンプルで複雑さがないので、これで必要十分というケースもあるだろう。
この機会に昔懐かしいPerlに触ってみるというのも一つの経験になるだろう。かつてCGIを書いていた人も、使っていただけの人も、どっちでもない人も、Perlという言語の魅力に触れてみたり、新しく発見してみる一つの機会になると思う。Perlの言語仕様はもしかしたら余り良くはないかもしれないが、夢中になって書いていれば、そんな言語でも新しい発見があったりして、きっと楽しいと思う。
いろんな意味で自分のホームページを作るという意味では非常に良いCMSだと思うので、私はそこが好きだ。
余談だが記事ID「0268」以降がadiaryの記事で、それ以前がWordPressの記事となる。厳密にいうとWordPressの記事の中には、はてなダイアリーやQiitaで書いた記事も入っているのだが、区別する術がないのでWordPressの記事ということで一緒くたにしている。特にない限りCMSの乗り換えはもうしないと思うので、この法則がずれることは恐らくないだろう。
因みに私がフォークしているバージョンでは暫定的にクリップボードの画像を直接アップロードできるように改造している。実験的な機能であるため動作保証などは一切しないが、もし画像が貼り付けられずに不便を感じる人がいたら使ってみてほしい。
.ps1ファイルを使えるようにする
Powershellを管理者権限で開き以下を流す
Set-ExecutionPolicy RemoteSigned
Explorerの右クリックメニューを使いやすくする
Windows側のアプリケーション導入
MSYS2
WSL2
以下のようなコードを書いたときにmockFnにイベント引数が渡らないが、これをどうにかして取る方法。結論から言うとまともに取れないが、試行錯誤した時のログとして残しておく
const mockFn = jest.fn();
render(<input onChange={mockFn} />);
fireEvent.change(inputElement, { target: { value: 'aaa' } });
確認環境
| Env | Ver |
|---|---|
| @swc/core | 1.3.66 |
| @swc/jest | 0.2.26 |
| @testing-library/jest-dom | 5.16.5 |
| @testing-library/react | 14.0.0 |
| jest | 29.5.0 |
| react | 18.2.0 |
サンプルコード
これは以下のように書くとfireEventの第二引数で指定したtarget.valueの部分だけは一応取れる。
理由としてはfireEventがelement.dispatchEventを読んでいると思われるためだ。余り深くは追っていないが、react-testing-libraryの実装上は多分そうなっていると思われる。
import { fireEvent, render } from '@testing-library/react';
it('test', () => {
const mockFn = jest.fn((ev) => {
console.log(ev);
});
const { container } = render(<input id="hoge" onChange={mockFn} value={'a'} />);
const element = container.querySelector('input');
if (element === null) throw new Error();
element.dispatchEvent = jest.fn();
fireEvent.change(element, {
target: {
value: 'bbb'
}
});
expect(element.dispatchEvent.mock.instances[0].value).toBe('bbb');
});
確認環境
| Env | Ver |
|---|---|
| Perl | 5.34.0 |
コード例
キャプチャ変数をifのスコープに封じ込める必要がある
my $text = <<EOF;
```unya
hoge
piyo
fuga
hpf
```
EOF
my @lines = split(/\n/, $text);
foreach my $line (@lines){
if ($line =~ /^(?<indent> *)(?<bquote>```)(?<lang>[a-z]*)$/) {
print "SYMBOL: '$+{indent}', '$+{bquote}', '$+{lang}'\n";
} else {
print "$line\n";
}
}
上手くいかないコードの例
その1
$+変数はマッチするまで中身が消えないので、このプログラムは予期した動きにならない
my $text = <<EOF;
```unya
hoge
piyo
fuga
hpf
```
EOF
my @lines = split(/\n/, $text);
foreach my $line (@lines){
$line =~ /^(?<indent> *)(?<bquote>```)(?<lang>[a-z]*)$/;
print "$+{indent}, $+{bquote}, $+{lang}\n";
}
その2
my $text = <<EOF;
```unya
hoge
piyo
fuga
hpf
```
EOF
my @lines = split(/\n/, $text);
foreach my $line (@lines){
$line =~ /^(?<indent> *)(?<bquote>```)(?<lang>[a-z]*)$/;
if (defined $+) {
print "$line: ";
print "$+{indent}, $+{bquote}, $+{lang}\n";
# この変数はundef出来ない
undef $+;
} else {
print "$line\n";
}
}