※当サイトはリンクに広告ページが含まれている場合があります
当事務所では、PHPのフレームワーク「Laravel」で、顧問先のみが閲覧できるWebアプリを構築・運営しています。
以前から実現したかったことの1つ「MarkdownからHTMLへの変換」をようやく実現しました。Markdownは業務効率化の最強ツールというのが私の持論ですし👍
MarkdownからHTMLへの変換方法を調べても、ライブラリの導入を紹介する記事ばかりで「確か標準機能でできるはずなのに・・・」とモヤモヤしつつ時間が過ぎていました。
本腰を入れて、公式ドキュメントを探していたら「ヘルパ Str::markdown()」にたどり着きました!
ふむふむ、Markdownパーサとして、CommonMarkを用いているわけですな。
Str::markdownメソッドは、GitHub風なマークダウンをHTMLへ、CommonMarkを用い変換します。
公式ドキュメントでは以下のような使い方が紹介されています。
use Illuminate\Support\Str;
$html = Str::markdown('# Laravel');
// <h1>Laravel</h1>
$html = Str::markdown('# Taylor <b>Otwell</b>', [
'html_input' => 'strip',
]);
// <h1>Taylor Otwell</h1>
MarkdownファイルからHTML表示する方法
ヘルパのStr::markdown関数を使えば良いことはわかりましたが、公式ドキュメントで紹介されている方法では直接文字列を入れているので、利用範囲が限られます。
そのため、Markdownファイル(*.md)から読み込んで、HTML表示する方法にしました。
利用したのは、
- PHPの標準関数:file_get_contents
- Laravelの標準ヘルパ:resource_path
file_get_contentsは、ファイルの内容を全て文字列に読み込む関数、resource_path関数は、resourcesフォルダのパスを取得できる関数です。
ちなみに、今後mdファイルが増えていく可能性もあるため、resourcesフォルダの中にmdフォルダを作り、その中にmdファイルを置くようにします。
まず、コントローラを以下のように作成。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
class MarkdownController extends Controller
{
public function index()
{
$html = Str::markdown(file_get_contents(resource_path('md/example.md')));
return view('example', ['html' => $html]);
}
}
次に、表示するMarkdownファイルを、resourcesフォルダ->mdフォルダの中に作成。Markdownファイルの中身は例なのでどんな内容でもOK。
# Example Heading
This is an example paragraph.
- List item 1
- List item 2
- List item 3
そして、HTMLを表示するBladeファイルを以下のように作成。めちゃくちゃ簡単。
<div>
{!! $html !!}
</div>
最後に、routesのweb.phpに以下を追加して完了。
use App\Http\Controllers\MarkdownController;
Route::get('example', [MarkdownController::class, 'index']);
モヤモヤしていた時間がもったいないと思えるほど、簡単にMarkdownからHTMLへの変換が完了👍
ただ、このままでは、まだまだ用途が限定されます。
MarkdownControllerクラスでファイル名を直接入れてますし・・・
Controllerクラスに関数を入れて呼び出す形にすべきか、と思いつつ、今後も試行錯誤してみます。
こういう試行錯誤がプログラミングの醍醐味ですし。
- 毎年のように改正される労働法令への対応に頭を悩ませている
- 総務や経理などの他の業務を兼務しているので、人事労務業務だけに時間を割けない
といった悩みを抱える企業の経営者・人事労務担当者向けに、公開型のブログでは書けない、本音を交えた人事労務に関する情報・ノウハウ、時期的なトピックに関するメールマガジンを「無料」で配信しています。
過去の配信分は公開しません。
情報が必要な方は、いますぐ以下のフォームから購読の登録をしてください。購読して不要と思ったら簡単に解除できますのでご安心ください。