Work Life Fun

Laravelの標準機能でMarkdownをHTMLに変換

※当サイトはリンクに広告ページが含まれている場合があります

当事務所では、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クラスに関数を入れて呼び出す形にすべきか、と思いつつ、今後も試行錯誤してみます。

こういう試行錯誤がプログラミングの醍醐味ですし。

社労士のための「ほどほど」お悩み相談室

あなたのご質問・ご相談に、月1回、無料・本音で回答します。

ご質問・ご相談は、登録後に届くメールから送っていただけます。費用は一切かかりません。「お悩み相談室」というクローズドな場だからこそ、踏み込んだ内容の質問にも回答できます。

これまでに、こんなご質問・ご相談に回答してきました。

  • コンサル(3号業務)を主力業務にするには、どうすれば良いか?
  • どのようにして顧問料を上げれば良いか?
  • 営業が苦手で、新規の顧客獲得ができない
  • 業務をどう絞り込めば良いか?
  • 一人社労士のままで良いのか、人を雇うべきか?
  • 苦手・相性の悪い顧問先と、どう付き合うか?
  • 生成AIの時代、社労士は今後どう生き残るか?

なぜ、無料で同業の社労士からの相談に乗るのか?

それは「本当に顧客のために活動できる社労士仲間を増やしたい」からです。

私自身、社労士という資格に誇りを持っています。企業からの社労士に対する不満をよく聞きますし、「社労士なんて役に立たない」と思われることは、正直悔しいです。

  • 信頼される・信頼できる社労士の仲間を増やしていきたい

そんな想いから、少しでも社労士業界全体のレベルアップに貢献できればと考えています。

    登録は無料・月1回配信・配信解除いつでも可能
    ※ 登録後、本人確認のメールをお送りします。届かない場合は迷惑メールフォルダもご確認ください。


    up_line