ブログ

日々の出来事

SNSが盛んになってから随分と月日が経ちました。
最近ではX、FaceBook、Instagram(Thereds)、Youtube、LINEなどのSNSに多くの人が集まり、活発に活用されています。

Webサイト制作の現場にいると、「WebサイトはSNSがあるからあまり活用していない」「WebサイトよりSNSの方が便利」などといった声も聞こえてくるほど、Webサイトの代わりとして運用されている人も多いのではないでしょうか。Webサイトの更新が止まっている代わりに、SNSを盛んに運用している事例も拝見します。

しかしビジネス的な視点でみると、SNSのみ利用される場合はリスクがあります。
そこで今回はSNSとWebサイトの良い関係性を考えてみようと思います。

SNSの良さとウィークポイント

SNSの良さはとは?それは「写真や文章、動画の投稿が手軽に出来ること」「同じ趣味などの仲間と繋がれること」「いいねやDMなどのメッセージで簡単にコミュニケーションが取れること」などでしょうか。実際の生活で知っている人とのコミュニケーションだけではなく、SNS上で知り合うことも出来ますので、今まで出会えなかった人と出会う事が出来ます。多くの人と人とが出会い、簡単に情報交換が可能な場がSNSの良さなのだと思いますが、最大のポイントはそこに「多くの人が集まっている」ということだと思います。

しかし優れたツールでも少し方向性を誤ったり、他に人気のツールが登場すれば、さほど執着もなく人々は離れていき、そのSNSの良さは失われていきます。急なアカウントの停止等により、積み上げた情報が一気にSNS上から失われ機能しなくなる恐れもあります。

SNSは非常に優れたツールですが、海外の企業が運用する無料サービスである以上、ネット上のビジネスの軸足をおくには危うい部分がありますので、あくまで情報を拡散しコミュニケーションを取るための窓口と考えておいた方が良さそうです。

自社Webサイトの良さとウィークポイント

Webサイトの良さとはなんでしょうか。
SNSと比較した場合の最大のメリットは、やはり自らが設計しWebを活用した仕組みで、コンテンツを制作する事が出来ます。SNSに比べてコストは掛かりますが、作り上げたコンテンツを蓄積しながら育てていく事が出来ます。この育てていくという作業は、自社のサービスや商品・もしくは企業自体のブランディングにも効果的で、こだわりのあるコンテンツを構築する事も可能です。

一方SNSと比べ弱いところは、サイト自体が独立した存在である場合が多く、そのWebサイト自体(企業・サービス・商品など)に魅力や興味・目的がなければ人が集まってこないということです。人に見ていただくためには流入元をしっかりと計画しておく必要があります。一般的に流入元としては、SNSなどの各種ツール、検索エンジン、広告、オウンドメディア(パンフレットなども含む)などです。

「SNS」はX、Facebook、Instagram(Thereds)、Youtube、LINEなどがよく活用されています。また検索エンジンからは、検索順位の上位を狙う「SEO対策」、Adsenseなどの検索エンジンやポータルサイトに出稿する「有料広告」、Googleの地図検索でサイトの表示を狙う「MEO」、Googleでビジネス情報を掲載するGoogleビジネスプロフィールなどです。
地域性を絞らず広く展開することもできますし、地域性のあるビジネスでは地図検索やビジネスプロフィールでローカル性を高めていく方法も効果があります。この様にWebサイト単体ではなく、検索エンジンや広告、そしてSNSを利用して、集客をされているケースが非常に多いです。

自社ツールという「オウンドメディアの強み」を持つことで、必要な情報をコントロールした発信ができ、営業・広報活動の中でブランディングが可能になりますが、一方集客性が弱いところを別のツールでSNSで補うことが必要となります。

自社のWebサイトを中心に各種SNSの利点を活かすことを考える

自社サイトはもちろん、各種SNSツールにもそれぞれに特化した良さがありますので、話をとりまとめますと「自社Webサイトを中心に、SNSや検索エンジンなどの利点を活かした、幅広い集客・広報活動を展開する」ことが大切だといえます。

例えば「X」は情報の拡散性に優れています。広く拡散することはメリットですが、匿名性が高く同じ人が複数のアカウントを持っていることも多く、掲載されている情報の信頼性も低い場合があります。広まりやすい反面、炎上しやすいリスクもありますし、最近では投稿が収益化されたことで、インプレッションを稼ぐだけの目的で運用されているケースも多くみられます。

「Instagram」は写真の投稿が必須なため、リアルな生活の一部が垣間見えることで、情報の信頼度は「X」よりは高い傾向です。ただしInstagram自体の情報拡散能力が低いため、フォロー外の幅広い層にアプローチすることは苦手だといえます。また趣味性が高いアカウントが多いので、アカウントの趣味嗜好が強く反映するSNSです。

「Youtube」は趣味・ビジネス・教育・エンタメと幅広いジャンルで人気があり、Youtubeに掲載が無いジャンルを探す方が難しいほどです。動画という情報量が多いコンテンツのため、運用する側からみると「サービス・商品のアピール、ブランディングに使いやすいSNS」ですが、映像をつくる制作コストが高いため運営には体力が必要になります。
数年前まではYoutuberという存在が目立ちましたが、数年前のコロナ期を境に「ビジネスでの運用」をされるケースが増えており、現在は広報活動の有力なツールとして注目されています。

最後に

今回は自社WebサイトとSNSなどの外部ツールの役割のお話を考えてみました。
「こんなに色々やらなくてはいいけないのか…大変だ」と思う方もいるかもしれませんが、ビジネスで競合より1歩リードするためには必要なことだと思いますので、ぜひそれぞれのツールの利点を活かしながら、計画的に運営されることをお勧めいたします。

お客様からは「自社サイトを運用するコツは?」「複数あるSNSをどう活用したら良いのだろう?」というお悩みもよく伺いますので、今後また「自社サイトを運用するコツ」も考えてみようと思います。長文お付き合いいただきまして、ありがとうございました。


この度XSERVERで利用可能なPHPのバージョンに、PHP8.3.7が導入された様です。
PHP8.3ではそれ以前のバージョンよりも安定性が向上し、従来のPHPと比較してパフォーマンスが大幅に強化されているとのことです。

当サイトでも利用しているa-blog cmsでは、すでにPHP8.3には対応済み(ver3.1.14以降)です。
PHP8.3.7を利用した最新スペックでのご利用をご希望の方は、ぜひa-blog cmsのバージョンアップも含めてサーバ環境の整備をご検討ください。

実施日時

2024年6月19日(水)

変更内容

エックスサーバーの全プラン

最後に

XSERVERは弊社で取り扱いの多いサーバですが、機能追加や機能性の向上など、積極的にサービスの改善がおこなわれている印象があります。今回の様に最新版のPHPが追加されるなど、さらなるサービスの強化は大変助かります。

XSERVERは通信速度も高速で安定しておりますし、非常にコストパフォーマンスの高いサービスになりますので、大変おすすめのホスティングサービスとなります。費用対効果の高い安全で高速なサーバをお探しの方は、ぜひ弊社までお問い合わせください。


先に前回のブログ「a-blog cmsにhtmx(jsライブラリ)を実装してみました【ver3.1.17対応版】」の続きになりますが、絞り込み中のタグをより分かりやすくするために、選択中のボタンに変化を加える処理を考えてみました。

自分でjsを作れば色々対応は出来ますが、a-blog cmsにはシステムに用意された「組み込みJS」という機能があります。こちらの機能はWebサイトを制作する上でよく使う機能があらかじめ用意されており、目的に合うものがあれば便利に使う事ができます。

a-blog cms Developers 組み込みJS

今回はそんな「組み込みJS」の中から、現在位置の状態を取得可能な「linkMatchLocation」を使ってみることにしました。

linkMatchLocationとは

表示中のページのURLとclassを付与した<a>の「href」を比較して、条件が合う場合に指定した別のclassを<a>に付与する事が出来る機能です。下記はテンプレートの記述例とその実行後の状態になります。条件に合うとclassに「指定した値(今回はstay)」が付与されます。

a-blog cms Developers 現在位置を装飾する

<!-- 例:ブラウザのアドレスが「https://www.ideasource.jp/blog/」の場合で付与するclassが「stay」の場合 -->
<!-- テンプレートの記述 -->
<a href="https://www.ideasource.jp/blog/" class="js-link_match_location">ブログ</a>

<!-- 実行後 -->
<a href="https://www.ideasource.jp/blog/" class="js-link_match_location stay">ブログ</a>

linkMatchLocationの種類

「linkMatchLocation」には複数種類があります。
値を含んでいる場合、完全一致する場合、ブログ、カテゴリー、エントリーが含まれている場合など、判定したい用途に合わせて設定します。



linkMatchLocationMark 現在表示しているページのURLが、アンカーリンクのリンク先URL中に含まれている場合に指定したclassを付与します
linkMatchLocationFullMark 現在表示しているページのURLと、アンカーリンクのリンク先URLが完全一致した場合にclassを付与します
linkMatchLocationBlogMark 現在表示しているブログのURLが、アンカーリンクのリンク先URL中に含まれている場合にclassを付与します
linkMatchLocationCategoryMark 現在表示しているカテゴリーのURLが、アンカーリンクのリンク先URL中に含まれている場合にclassを付与します
linkMatchLocationEntryMark 現在表示しているエントリーのURLが、アンカーリンクのリンク先URL中に含まれている場合にclassを付与します

今回は「linkMatchLocationMark(.js-link_match_location)」を利用して実装


linkMatchLocationでタグの絞り込みをわかりやすく実装

「主要なキーワード(tag)」で絞り込んだ際に、ボタンの<a>にclassで「stay」を付与し、cssで色を変えています。
「linkMatchLocationMark」はURLを含む値で判定できますので、ページャーなどで次ページに移った際にも判定出来ますので、ボタンの「stay」の状態が切れることはありません。htmxでURLを変更した際にも「linkMatchLocation」は問題なく動作しますので、htmxのSPA的な動きと組み合わせると色々なところで応用が効きそうです。

・実装したページはこちら(弊社の制作事例ページ

最後に

今回はa-blog cmsの「組み込みJS」とhtmxを使い、簡単に現在位置の反映ができました。この様にa-blog cmsはhtmxとの連携にも強く、a-blog cmsに元々備わっている「組み込みJS」を使った場合にも、効率的に動作させる事が出来ます。a-blog cms ver3.1.17でhtmxの利用が従来より簡単になり、セキュリティ面も強化されましたので、さらに安心して利用する事が出来る様になりました。htmxはUXの改善にも使いやすいので非常に嬉しいです。

ということで、今回はa-blog cmsとhtmxで「組み込みJS」を使ってみました。
またa-blog cmsとhtmxにつきましては、随時レポートしていこうと思います。

弊社がなぜa-blog cmsを愛用しているのか、a-blog cmsの特徴やメリットとは。
a-blog cmsをお勧めする理由につきましてはこちらのページをご覧ください。
a-blog cmsをお勧めする理由


先日a-blog cms + htmxの勉強会で学んだことを忘れない様に、早速チャレンジしてみました。
当サイトで便利に活用できそうな場所ということで、「制作事例」一覧ページを制作事例のタグを使って絞り込みをします。
htmxって何?という方は、先に前回のブログ「a-blog cmsとhtmx(jsライブラリ)は非常に相性が良い」をご覧ください。

2024/6/14追記:a-blog cms ver 3.1.17からhtmxとの親和性がより高くなり「hx-ext="ajax-header"」の表記が不要となりました。
また、htmx利用時のセキュリティも向上しておりますので、詳しくは下記の説明に追記した【a-blog cms ver3.1.17より変更】の箇所をご確認ください。

a-blog cmsへのhtmx実装方法


制作事例へhtmxを実装

今回はすでに制作事例のエントリーに付いているタグを利用して、「主要キーワードでの絞り込み」というものを作ることにしました。
ただ、あまり細かなタグを並べても数が多すぎるので、ページ上部は主要なものだけにして、細かいタグは各事例の部分で絞り込める様になっています。

※こちらではhtmxの細かな設定についてというより、htmxをa-blog cmsに実装する方法をご紹介しておりますので、htmx自体について知りたい方は htmx の公式ページをご確認ください。

a-blog cmsの設定確認と用意するもの

config.system.yamlの設定を確認

#a-blog cms ver3.1.6以前の場合
forbid_tpl_url_context: off
html_format_validate: off

こちらの2つの設定が「off」になっていないと、htmxを利用することは出来ませんので、まず最初に確認してください。

【a-blog cms ver3.1.17より変更】
a-blog cms ver3.1.17からa-blog cmsの機能が向上しており、下記の設定で動作可能です。また新たな設定も追加されておりますので、従来よりセキュアな環境でご利用いただけるようになっております。

#a-blog cms ver3.1.7以降の場合
forbid_tpl_url_context: on #on / off どちらでも可
html_format_validate: on #on / off どちらでも可
ajax_security_level: 2 #ajaxリクエストのセキュリティレベルを設定します。(0: チェックなし 1: RefererとHttpヘッダーを確認 2: CSRFトークン確認)

a-blog cms ver3.1.17以降はこちらの2つの設定が「on」「off」のどちらでもhtmxをご利用可能です。
「ajax_security_level」はa-blog cms ver3.1.17より追加された設定です。こちらはお好みで設定してください。

【重要】「ajax_security_level:2」に設定する場合は、htmlの要素に「check-csrf-token」の記述が必要となります。class名などでどこかに追加をしてください。「check-csrf-token」の文字列があるとa-blog cmsがCSRFトークンを発行します。(例:<body class="check-csrf-token">)

jsライブラリとa-blog cms用の記述を設定

次にhtmxのjsライブラリとa-blog cmsに必要な記述を設定します。
記述は<head>内で大丈夫です。htmxのファイルは公式サイトからDLしてください。

・htmx htmxのオフィシャルサイトはこちら
・htmx ajax header htmxのオフィシャルサイト「htmx ajax header」についてはこちら (a-blog cms ver3.1.17以降は不要)

<!-- htmx -->
<script src="/js/htmx.min.js"></script>
<script src="/js/ajax-header.js"></script> <!-- a-blog cms ver3.1.17以降の場合は不要 -->

<!-- a-blog cms で htmx を動かすおまじない -->
<script>
    addEventListener('htmx:beforeHistoryUpdate', function (event) {
        const proposedUrl = event.detail.history.path;
        const customUrl = proposedUrl.replace(/tpl\/include\/htmx\/.*\.html/, '');
        event.detail.history.path = customUrl;
    });

    //a-blog cms ver3.1.17より追加
    document.addEventListener("htmx:configRequest", function(event) {
        const csrfToken = document.querySelector('meta[name="csrf-token"]').content;
        event.detail.headers['X-CSRF-Token'] = csrfToken;
    });

    //htmx:afterSwap swap処理後にJSを実行
    addEventListener('htmx:afterSwap', function (event) {
        ACMS.Dispatch(event.target);
    });
</script>

「addEventListener」の「htmx:beforeHistoryUpdate」は、htmxでテンプレートを適用する際に「/tpl/include/htmx/xxxxx.html」の様なパスが付いてしまう場合に、リプレイスして削除処理するためのものです。こちらはファイルの置き場所によってパスを変更します。
「addEventListener」の「htmx:afterSwap」はhtmxのswap後に、a-blog cmsのjsを実行する際に必要な記述の様です。

【a-blog cms ver3.1.17より変更】
「htmx ajax header」の読み込みは不要となりました。また、「htmx:configRequest」はver3.1.17で新たに追加された機能です。a-blog cms ver3.1.17以上で利用する場合に必要な記述になります。


これで準備はOKです。あとはテンプレートに記述するだけ。今回のケースでは下記テンプレートを用意しました。

htmx用のテンプレートを用意します

a-blog cmsテンプレートのインクルードの記述

a-blog cmsのテンプレートは1度の処理で動きますが、htmxでは複数箇所動かす場合があるため「multi_swap」の値で制御しているそうです。@includeでその為の値を渡してテンプレートを読み込んでいます。

@include("/include/htmx/work_htmx.html",{"multi_swap": "off"})

<a>がリクエスト側の記述 / <div id="work_htmxfield">がレスポンス側の記述

<a>をクリックしたら#work_htmxfield(親のwrapper)を「/include/htmx/work_htmx.html」で置き換えています。(自分自身を置き換え)
こちらのサンプルでは絞り込みは「Web制作」だけになっています。
先ほどの「multi_swap」は<title>のところを制御しています。(値がoffではない時のみ表示)

【a-blog cms 3.1.17より変更】
下記ソースにも追記しましたが、a-blog cms ver3.1.17以降は「hx-ext="ajax-header"」の記述は不要となりました。
a-blog cms ver3.1.17以降でご利用の場合は「hx-ext="ajax-header"」の記述を削除してください。

<div id="work_htmxfield">
  <!-- htmx で絞り込み  -->
  <!-- 注:a-blog cms ver3.1.17以降は hx-ext="ajax-header"の記述は不要です  -->
  <a href="/service/creative_work/tag/Web制作/" hx-get="/service/creative_work/tag/Web制作/tpl/include/htmx/work_htmx.html" hx-trigger="click" hx-target="#work_htmxfield" hx-swap="innerHTML" hx-ext="ajax-header" hx-push-url="/service/creative_work/tag/Web制作/">【Web制作】</a>

  <!-- ここに Entry_Summary などのモジュールで置き換えたい事例リストを掲載 -->
</div>

<!-- 選択したタグを含めた結果で <title> を置き換え -->
<!-- BEGIN_IF [{{multi_swap}}/neq/off] -->
  <!-- BEGIN_MODULE Ogp --><title>{title}</title><!-- END_MODULE Ogp -->
<!-- END_IF -->

一応簡単に説明すると、ポイントとしては下記の様な感じです。
・href:本来遷移するURL
・hx-trigger:発火条件/clickは要素をクリック
・hx-target:置き換え対象/#work_htmxfield
・hx-swap:置き換え方法/innerHTMLは指定要素の中身を置き換えます。
・hx-get:a-blog cmsのURLコンテキストが通るhtmxテンプレートも含めたパス
・hx-push-url:ブラザウのURL欄に表示したいパス

「hx-get」はa-blog cmsのURLコンテキストが通る「/tpl/」も含めたhtmxテンプレートへのパスになる為、冒頭でご紹介したjsで「/tpl」以降のパスを削除して表示しています。(検索botなどから無駄なURLへのクロール・キャッシュを防ぐ目的があるそうです)

また、Entry_SummaryなどのモジュールID(今回でいうところの制作事例の一覧)は、tagで絞り込める様にモジュールを設定しておく必要があります。<title>部分は、絞り込んだ状態のタイトル情報で上書きしています。こちらはhtmxの機能で、<title>タグの書き換えができます。

少しお断りを入れると、今回実装した実際のコードは「hx-」を「data-hx-」にしています。こちらはhtmlのバリデーターの問題を避けるためで、海外の情報を参考にしました。公式ではございませんのでこちらでは「data-」は省いております。

ページャーの設定

エントリー数が多くなると、一覧表示時に一度に表示することが困難になってきますので、ページャーにも対応してみました。
PCとスマホとの両立を考えると、「続きを見る」としてその場でロードし追加表示する実装も良いと思いますが、再度アクセスした際に初期状態に戻ってしまうことを考えると、今回はページャーを実装しページを分けてヒストリーバックが機能する様にしてみました。

【a-blog cms 3.1.17より変更】
下記ソースにも追記しましたが、a-blog cms ver3.1.17以降は「hx-ext="ajax-header"」の記述は不要となりました。
a-blog cms ver3.1.17以降でご利用の場合は「hx-ext="ajax-header"」の記述を削除してください。

<!-- BEGIN pager:veil -->
<!-- ページ送り 開始▼▼ -->
<!-- 注:a-blog cms ver3.1.17以降は hx-ext="ajax-headerの記述は不要です"  -->
<nav id="work_tagsearch_htmx_pager">
	<ul class="pagination">
		<!-- BEGIN backLink --><li class="serial-nav-item serial-nav-item-prev"><!-- BEGIN prevPage --><a href="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->page/{backPage}/#work_tagsearch_htmx" hx-get="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->page/{backPage}/tpl/include/htmx/work_htmx.html" hx-trigger="click" hx-target="#work_htmxfield" hx-swap="innerHTML" hx-ext="ajax-header" hx-push-url="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->page/{backPage}/" aria-label="前へ" class="scrollTo"><span aria-hidden="true">&laquo;</span></a></li><!-- END backLink -->

		<!-- BEGIN firstPage:veil --><li {pageCurAttr}[raw]><span><a href="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->#work_tagsearch_htmx" hx-get="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->tpl/include/htmx/work_htmx.html" hx-trigger="click" hx-target="#work_htmxfield" hx-swap="innerHTML" hx-ext="ajax-header" hx-push-url="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->" class="scrollTo">{firstPage}</a></span></li><li class="peger_pipe"></li><!-- END firstPage:veil -->

		<!-- BEGIN page:loop --><li {pageCurAttr}[raw]><span><!-- BEGIN link#front --><!-- END link#front --><a href="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->page/{page}/#work_tagsearch_htmx" hx-get="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->page/{page}/tpl/include/htmx/work_htmx.html" hx-trigger="click" hx-target="#work_htmxfield" hx-swap="innerHTML" hx-ext="ajax-header" hx-push-url="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->page/{page}/" class="scrollTo">{page}</a><!-- BEGIN link#rear --><!-- END link#rear --><!-- BEGIN glue --><!-- END glue --></span></li><!-- END page:loop -->

		<!-- BEGIN lastPage:veil --><li class="peger_pipe"></li><li {pageCurAttr}[raw]><span><a href="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->page/{lastPage}/#work_tagsearch_htmx" hx-get="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->page/{lastPage}/tpl/include/htmx/work_htmx.html" hx-trigger="click" hx-target="#work_htmxfield" hx-swap="innerHTML" hx-ext="ajax-header" hx-push-url="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->page/{lastPage}/" class="scrollTo">{lastPage}</a></span></li><!-- END lastPage:veil -->

		<!-- BEGIN forwardLink --><li><a href="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->page/{forwardPage}/#work_tagsearch_htmx" hx-get="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->page/{forwardPage}/tpl/include/htmx/work_htmx.html" hx-trigger="click" hx-target="#work_htmxfield" hx-swap="innerHTML" hx-ext="ajax-header" hx-push-url="/service/creative_work/<!-- BEGIN_IF [%{TAG}/nem] -->tag/%{TAG}/<!-- END_IF -->page/{forwardPage}/" aria-label="次へ" class="scrollTo"><span aria-hidden="true">&raquo;</span></a></li><!-- END forwardLink -->
	</ul>
</nav>
<!-- ページ送り 終了▲▲ -->
<!-- END pager:veil -->

上記のポイントとしては、Entry_Summaryの通常のページャーを使っています。
簡易ページャーでは前後のURLの変数が、ページ番号を含めひとまとめになっていることで、htmxの記述を適用することが難しかったため、表示ページのページ番号だけで取得可能なページャーがおすすめです。もし簡易ページャーで実装する場合は、何かしら現在ページの/page/の値を取得する方法を考えなくてはいけないと思います。

また、上記のページャー自体の機能で/page/の値の有無は判断できますが、/tag/の有無は判定できないため、グローバル変数%{TAG}で表示ページのタグの有無を調べ、タグがある場合だけIFブロックで「href」「hx-get」「hx-push-url」にタグに関連する内容を出力しています。

注意ポイント

「hx-push-url」でアドレスを変更したので、その変更したアドレスでダイレクトにアクセスされた際にも、同様のページが表示できるかは確認をしてください。今回はタグ・ページャーともに絡んだ実装になるため気を使いましたが、別タブでリンクを開く人も多いので重要だと思います。逆に「hx-push-url」を使わない実装の場合は、アクセスしたページのみで機能するので手軽に対応できると思います。

実際に実装してみて

正直「こんなに簡単にできるとは!!!」という感じです。
すごく手軽に実装できるので、積極的に取り入れても良いのではないでしょうか。
UXの向上はSEOにも効果があるということですしね。とても良いものを教えていただきました。

最後に

弊社がなぜa-blog cmsを愛用しているのか、a-blog cmsの特徴やメリットとは。
a-blog cmsをお勧めする理由につきましてはこちらのページをご覧ください。
a-blog cmsをお勧めする理由


2024/6/11に名駅のコワーキングスペース ベースキャンプ名古屋で開催された「a-blog cms 勉強会 in 名古屋 2024/06」に参加してきました。
a-blog cms勉強会は毎月定期的に開催されており、普段からa-blog cmsをヘビーユースされているビジネスパートナーの方や、まだ始めたばかりの初心者の方、そしてa-blog cms開発会社のアップルップル社の皆さんなど、多くの参加者で一緒にa-blog cmsを学んでいます。a-blog cms周りの話題はもちろん、最近のWebのトレンドなどのお話も出ますのでいつも大変勉強になっております。

a-blog cms Ver. 3.1.17 リリースのお知らせ

まず最初の話題としましては、新しくリリースされた3.1.17のリリース情報のお知らせがありました。
詳細は「a-blog cms公式サイトのデベロッパー情報」をご確認いただければわかりますが、新機能と変更点のあった項目の中から、時に個人的に嬉しかったポイントをピックアップしてご紹介します。

新機能

  • CMS-6808 メディア作成・更新時のHookを新しく追加(saveMedia)
  • CMS-6814 エントリーの複製時にカスタムフィールド、カスタムユニット、ユニットに保存されたファイル名をランダムにするかをカスタマイズするオプション(entry_duplicate_random_filename)を config.system.yaml に追加
  • CMS-6827 子ブログを含んだ初期インストールが出来る仕組みを用意
  • CMS-6824 Google検索に対してサイト名を指定するWebSite構造化データを追加
  • CMS-6842 インストーラーでデータベースの照合順序を選択できるように修正

変更点

  • CMS-6804 CMSで作成するファイル・ディレクトリのパーミッション設定をconfig.server.phpで設定するように変更
  • CMS-6840 Ajaxによる部分テンプレートアクセスにCSRFトークンによる認証を追加し、許可するtpl指定(allow_tpl_path)を個別指定しなくてもいいように改修 & Ajaxリクエストのセキュリティレベルオプションを用意(ajax_security_level)

個人的に嬉しかった推しのポイント

「CMS-6824」はGoogle検索結果での表記の指定に関わりますので、日頃からSEOを気にされている方には嬉しい機能になると思います。
また、「CMS-6842」は絵文字を使う際に指定する「utf8mb4」がインストール時から選べる様になったことで、後からデータベースを変更する手間が減るためとても便利になりそうです。

実は個人的に一番嬉しかったのが変更点「CMS-6840」です。先日こちらのブログ(a-blog cmsにhtmx(jsライブラリ)を実装してみました)でも紹介しましたが、今回こちらの仕様変更により、今まで以上にセキュアで簡単にhtmxの実装が可能になりました。htmxにはとても可能性を感じておりますので、a-blog cms + htmxが使いやすくなることは非常に嬉しいです。

勉強会に参加された皆さんの質問・疑問にお答えするコーナー

リリース情報の後は、勉強会に参加された皆さんが持ち寄った質疑応答のコーナーでした。
普段作業されているなかで解決ができなかったことや、作業の進め方の意見交換など、実際に作業をされている方々だからこそ抱えているお悩みなどを意見交換しながら解決していきました。

僕は利用歴が長いので知っている事もありましたが、長く使っていてもまだまだ知らない事や、使う機会がなくて忘れていた機能もあり勉強になりました。特に普段触ることの少ないプロフェッショナルライセンスの機能などは、こういった機会がないと画面をみながら情報交換することは難しく感じていますので、とても有意義な時間でした。

最後に

今回もとても勉強になり、有意義な時間でした。
参加された皆さま、そしてアップルップルの皆さま、本当にありがとうございました。

冒頭にもお話ししましたが、a-blog cmsの勉強会は定期的に開催されております。
特に名古屋にはa-blog cmsの開発会社であるアップルップルさんがありますので、実際に集まり開発されているスタッフの皆さんやビジネスパートナー・ユーザーの皆さんと、対面でお話をしながら勉強が出来ます。普段抱えている悩み等や疑問も相談する事ができますし、こんな機能があったら嬉しいなどもお話しできます。名古屋まで参加ができない方に向けに、他のエリアでも勉強会が開催されておりますし、オンラインでも開催されております。

a-blog cmsは大変素晴らしいサポート体制が整っておりますが、これはアップルップルの皆さんの運営なくしてありえないので、とてもとても感謝しております。(ここ大事なところ!)

a-blog cmsの利用を予定されている方や、これから勉強されたい方など、a-blog cms勉強会に参加されてみてはいかがでしょうか?ぜひ国産のcmsの良さを体験してみてくださいね。これからもa-blog cmsが今まで以上に盛り上がっていくと嬉しいので、興味がある方は一緒に勉強しましょう。

【a-blog cms勉強会の詳細はこちらから】
a-blog cms イベントスケジュール
名駅のコワーキングスペース ベースキャンプ名古屋