<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0" xml:lang="ja">
<channel>
<title>スタッフブログ</title>
<link>http://stage.appleple.com/blog/</link>
<atom:link href="https://stage.appleple.com/blog/rss2.xml" rel="self" type="application/rss+xml" />
<description></description>
<language>ja</language>
<copyright>©️ 2004 appleple Inc.</copyright>
<lastBuildDate>Wed, 17 Jun 2026 17:03:43 +0900</lastBuildDate>
<generator>a-blog cms</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<item>
<dc:creator>appleple</dc:creator>
<title>VPS でマルチサイトの運用方法を学ぶ</title>
<link>https://stage.appleple.com/blog/server/vps-multi-site.html</link>
      <description><![CDATA[















































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->










































<!-- media -->
<div class="column-media-auto acms-col-sm-12 ">

<a href="https://stage.appleple.com/media/002/202407/sftp-vps-multisite.png?v=20240717185822"data-rel="SmartPhoto">
<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202407/mode3_w920-sftp-vps-multisite.png?v=20240717185822"
 width="920"
 height="517"
 alt="VPSでマルチサイトの運用方法を学ぶ">
</a>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>VPS でマルチサイトを運用する機会があり、いくつか勉強になったことがあったので記事にします。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p><strong>またこの記事では、マルチサイトをルートドメインとサブドメインを利用した複数サイトを指していることと、サーバーの設定は最小限の設定ですので本番運用される際は十分にご注意ください。</strong></p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">













<!-- テーブル -->
<div class="column-table">
  <div  class="entry-container">
  <table class="table-border">
<tr>
<th>サーバー</th>
<td>Xserver VPS</td>
</tr>
<tr>
<th>SSL</th>
<td>Xserver ワイルドカードSSL</td>
</tr>
<tr>
<th>OS</th>
<td>Ubuntu 22.04.2 LTS</td>
</tr>
<tr>
<th>Webサーバー</th>
<td>nginx</td>
</tr>
<tr>
<th>アプリケーション</th>
<td>a-blog cms</td>
</tr>
</table>

  </div>
</div>
































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 >VPS でマルチサイトを運用する仕組み</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>この記事で触れること、実装して何ができるかについて説明します。www.example.com または example.com のルートドメインと vhost.example.com のようなサブドメインのディレクトリを用意し、nginx のバーチャルホストを利用してアクセス先を分割します。そして、バーチャルホストに SSL と a-blog cms を動作させるための設定を行い、サブドメインは SFTP のみでアクセスできるようにします。この実装を行うことでルートドメインで運用を行い、サブドメインでは特定のエンドユーザーにサイトを与え、複数のサイト運用ができます。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 >ディレクトリの構成</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <dl class="-dl-simple">
<dt>ルートドメイン</dt>
<dd>/var/www/html/ にします。</dd>
</dl>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <dl class="-dl-simple">
<dt>サブドメイン</dt>
<dd>/var/www/vhost/ にします。エンドユーザーには触って欲しくないファイルがある場合は、サブドメインのディレクトリ直下に2つ用意し、1つブラウザに表示するためのアプリケーションを設置し、その中からユーザーが触っていいファイルだけもう一つのディレクトリに抜き出して、ブラウザ表示用にシンボリックリンクを貼ります。これにより SFTP での制限を設け、エンドユーザーはファイルを操作することができるようにしていきます。</dd>
</dl>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >nginx の Webサーバー設定</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>まずはサンプルコードをご確認ください。ルートドメインの設定です。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <pre><code># -------------------------
# サーバー設定
# -------------------------

# www つきにリダイレクト
server {
    listen 80;
    listen 443 ssl;
    server_name example.com;

    location / {
         return 301 https://www.example.com$request_uri;
    }
}

# SSL にリダイレクト
server {
    listen 80;
    server_name www.example.com;

    location / {
        return 301 https://$host$request_uri;
    }
}

# SSL の表示用サーバー設定
server {
    listen 443 ssl;
    server_name www.example.com;

    # SSL / LTS
    ssl_certificate /etc/nginx/ssl/crt/example.crt; // 公開鍵にコモンネームなどの情報をつけたもの
    ssl_certificate_key /etc/nginx/ssl/key/example.key; // 秘密鍵

    # ドキュメントルート
    root /var/www/html;
    index index.php;

    include snippets/example.conf; // a-blog cms のサーバー設定
</code></pre>

  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>www付きへリダイレクトしていることが <code>server_name</code> と <code>location</code> から分かります。また、SSLとドキュメントルートが先ほど用意したパスへ繋がるように設定しています。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>そしてもう一つ、サブドメインの設定も必要です。<code>server_name</code> を <code>vhost.example.com</code>​ のようにサブドメインに置き換えるだけで大丈夫です。SSL については、サブドメインも含め1つの証明書で暗号化できる Xserver ワイルドカードSSL を使用しています。ですので <code>ssl_certificate</code>​ と <code>ssl_certificate_key</code>​ は、ルートドメインと共通で使用できます。ドキュメントルートもサブドメイン用のディレクトリパスに変えてください。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >nginx で動かす a-blog cms</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>a-blog cms を動作させるためのサーバー設定も必要です。a-blog cms 同梱の <code>.htaccess</code>​ は Apache で動作させるためのファイルですので nginx では使えません。ルートドメインもサブドメインも a-blog cms ですので、共通のファイルで管理をして Webサーバー設定の include で以下の設定を読み込みます。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <pre><code># -------------------------
# これは、a-blog cms を動作させるための設定です。Apache の .htaccess に当たります。
# -------------------------

# 隠しファイルへのアクセス禁止
location ~ /\. {
        deny all;
}

# アセットのキャッシュ・セキュリティ設定
location ~* \.(css|js)$ {
        expires 365d;
        add_header Cache-Control "public, max-age=31536000";
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header Strict-Transport-Security "max-age=31536000";
        add_header Referrer-Policy "strict-origin-when-cross-origin";
        gzip on;
        gzip_types text/css application/javascript;
        gzip_vary on;
}

# 画像およびメディアファイルのキャッシュ設定
location ~* \.(gif|jpeg|jpg|png|flv|mp4|ico|svg|webp)$ {
        expires 365d;
        add_header Cache-Control "public, max-age=31536000";
        add_header ETag "";
}

# FastCGI 設定
location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;  # PHPのバージョンに応じて変更
}

# 画像のWebP対応
location ~* ^(.+)\.(jpe?g|png)$ {
        set $base $1;
        set $ext $2;
        if ($http_accept ~* "image/webp") {
            set $webp_suffix ".webp";
        }
        if ($arg_type = "original") {
            set $webp_suffix "";
        }
        try_files $base$webp_suffix /path/to/your/webp/images$uri =404;
        add_header Vary Accept;

        location ~* ^(.+)\.webp$ {
            expires 365d;
            add_header Cache-Control "public, max-age=31536000";
            add_header Content-Type image/webp;
        }
}

# ルートディレクトリの処理設定
location / {
try_files $uri $uri/ /index.php$is_args$args;
}

# URL書き換え設定
rewrite ^/(.*)/index\.html/?$ https://$host/$1/ permanent;
</code></pre>

  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 >SSH / SFTP</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>ここでは、サブドメインをエンドユーザーが触ることを想定して設定していきます。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>前提として、サブドメインのサイトにはユーザーID とパスワードの発行が必要です。このユーザーID とパスワードでディレクトリ権限を与えます。ただ、これだと ssh でアクセスされセキュリティに問題があるので、SFTP でのアクセスのみ許可するようにします。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>そのために SFTPサーバーの internal-sftp を使用します。internal-sftp は、外部プログラムに依存せずに、SSHデーモンの一部として動作する内部サブシステムです。internal-sftp を使うにあたって注意点があり、ChrootDirectory で指定しているディレクトリとその親達は root権限にしておく必要があります。そして、アクセスするユーザーに root権限のディレクトリの書き込み権限は与えないようにします。権限を与えていいのは、ChrootDirectory の中の ファイル / ディレクトリ のみです。もし間違っていると、セキュリティ上の理由でアクセス拒否されてしまいます。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>以下が sftp の設定です。ChrootDirectory は sftp のアクセス先を設定してください。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <pre><code>Subsystem sftp internal-sftp
Match User !exampleUser1,!exampleUser2
ChrootDirectory /var/www/vhost/sftp
ForceCommand internal-sftp
</code></pre>

  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>以上が、ルートドメインで運用を行い、サブドメインでは特定のエンドユーザーにサイトを与え、複数のサイト運用をする仕組みです。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 >実装をしてみて</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>実装していてよく権限で困った印象があります。SFTP の ChrootDirectory だったり、a-blog cms の一部が動作しなかったことがありました。サーバー自体この時ほぼ初めて触ったこともあり、いい経験になりました。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->























































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->










]]></description>
<category>サーバー</category>
<guid isPermaLink="true">https://stage.appleple.com/blog/server/vps-multi-site.html</guid>
<pubDate>Thu, 18 Jul 2024 12:21:27 +0900</pubDate>
</item>
<item>
<dc:creator>appleple</dc:creator>
<title>htmx 初心者向け勉強会のハンズオン資料を公開します</title>
<link>https://stage.appleple.com/blog/event-report/htmx-beginner-workshop.html</link>
      <description><![CDATA[















































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->










































<!-- media -->
<div class="column-media-auto acms-col-sm-12 ">

<a href="https://stage.appleple.com/media/002/202406/htmx-ablogcms-head.png?v=20240621145609"data-rel="SmartPhoto">
<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202406/mode3_w920-htmx-ablogcms-head.png?v=20240621145609"
 width="920"
 height="517"
 alt="">
</a>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>2024年4月の名古屋から始まり、5月大阪、6月福岡と東京で「htmx初心者向け勉強会」というイベントを開催してきました。 前半は CMS を絡めず静的な HTML ベースで純粋に htmx で何ができるのかをご紹介し、後半はバックエンド側を a-blog cms にお任せすると、こんな実装になるということをお伝えしてきました。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <ul>
<li><a href="#nagoya-osaka">名古屋・大阪で利用した勉強会ドキュメント</a></li>
<li><a href="#fukuoka-tokyo">福岡・東京で利用したハンズオンサイト</a></li>
<li><a href="#event-report">リアルイベントのレポート</a><ul>
<li><a href="#nagoya">名古屋 / 2024年4月23日 16人</a></li>
<li><a href="#osaka">大阪 / 2024年5月22日 9人</a></li>
<li><a href="#fukuoka">福岡 / 2024年6月14日 13人</a></li>
<li><a href="#tokyo">東京 / 2024年6月20日 9人</a></li>
</ul>
</li>
</ul>

  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 id="nagoya-osaka">名古屋・大阪で利用した勉強会ドキュメント</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>当初は、htmx の属性について1枚の HTML にまとめて、そのファイル自身を修正して自身のサーバーにアップして動きを見てもらうというカタチで開催していました。</p>

  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <ul class="normal">
<li><a href="https://htmx.sakuraweb.com/20240522/htmx.html">htmx入門</a></li>
<li><a href="https://htmx.sakuraweb.com/20240522/ablogcms.html">a-blog cms & htmx 入門</a></li>
</ul>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>しかし、このカタチだと、話を聞いてもらうだけで実際に手を動かして検証してもらうことが、あまりできてなかったと感じ、後半の地域では <a href="#fukuoka-tokyo">以下のようにアップデート</a> をしています。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<a href="https://htmx.sakuraweb.com/20240522/htmx.html">
<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202406/mode3_w600-SCR-20240621-otwu.png?v=20240621164827"
 width="600"
 height="355"
 alt="">
</a>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 id="fukuoka-tokyo">福岡・東京で利用したハンズオンサイト</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p><strong>htmx@blog</strong> テーマという <strong>htmx</strong> を使ったブログテーマの上で、CMS にログインする事で簡単に <strong>htmx</strong> のコードを書き換えて試すことができるようにしました。また、全員が同じサイトではなく <strong>a-blog cms</strong> のお試しサーバーを利用し、テーマを勉強会用のものを選択すると、個々のサイトがサブドメインで作られるようにしてハンズオンをしっかりできるようにしました。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<a href="https://d9hqioo2.ablogcms.io/">
<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202406/mode3_w600-SCR-20240621-ovag.png?v=20240621165124"
 width="600"
 height="408"
 alt="">
</a>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>上記のキャプチャのリンク先は、ログインできないサンプルとしてリンクしておきます。（日数が経つと消えてしまうので、無くなっていたら以下のリンクからハンズオンサイトを作ってご覧ください）<br />
<br />
ablogcms.io というお試し専用のサービスサイトは 30日で削除されますので、お気軽にお試しください！</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <ul class="normal">
<li><a href="https://www.ablogcms.io/htmx/?theme=workshop@blog#form">勉強会 ハンズオンサイト</a></li>
<li><a href="https://www.ablogcms.io/htmx/?theme=htmx@site#form">htmx@site（htmx化されたコーポレートサイトのサンプル）</a></li>
<li><a href="https://www.ablogcms.io/htmx/?theme=htmx@blog#form">htmx@blog（htmx化されたブログサイトのサンプル）</a></li>
</ul>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<a href="https://www.ablogcms.io/htmx/?theme=workshop@blog#form">
<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202406/mode3_w600-SCR-20240621-oyhq.png?v=20240621170044"
 width="600"
 height="411"
 alt="ablogcms.io htmx ハンズオン 申し込みページ">
</a>
<p class="caption">勉強会用でテスト環境を構築する</p>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 id="event-report">リアルイベントのレポート</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">



<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 id="nagoya">名古屋 / 2024年4月23日 16人</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-right acms-col-sm-6 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202406/mode3_w440-htmx-nagoya.png?v=20240621153447"
 width="440"
 height="247"
 alt="">
<p class="caption">名古屋勉強会</p>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>名古屋での勉強会では、参加者全員が a-blog cms のユーザーの方ばかりでした。そのため、前半のセッションでは、htmx の基本概念や静的な HTML でのデモを通じて、初めての方にも理解しやすい内容を心がけました。後半では、a-blog cms と htmx の連携に重点を置き、実際のプロジェクトでの活用方法を具体的に解説しました。<br />
<br />
参加された中でも <a href="https://www.ideasource.jp/">IDEASOURCE</a> の新さんは、翌日に自社のサイトのコンテンツの一部を htmx 化し、ブログの記事を公開いただきました。 <a href="https://www.ideasource.jp/blog/entry-225.html">a-blog cmsとhtmx（jsライブラリ）は非常に相性が良い </a></p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">



<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 id="osaka">大阪 / 2024年5月22日 9人</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-left acms-col-sm-6 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202406/mode3_w440-htmx-osaka.png?v=20240621153447"
 width="440"
 height="247"
 alt="">
<p class="caption">大阪勉強会</p>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>大阪での勉強会では、名古屋でのフィードバックを反映し、より具体的な実装例を交えながら進めました。参加者の皆さんからは、「実際に手を動かすことで、より理解が深まった」との声を多くいただきました。<br />
<br />
大阪での定期勉強会のための会場を探しています！ オススメな会場があればお知らせください。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">



<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 id="fukuoka">福岡 2024年6月14日 13人</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-right acms-col-sm-6 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202406/mode3_w440-htmx-fukuoka_240621_153447.png?v=20240621153447"
 width="440"
 height="247"
 alt="">
<p class="caption">福岡勉強会</p>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>福岡での勉強会では、ハンズオンのやり方を変更し、より実践的で分かりやすい内容に改訂しました。参加者の半分は a-blog cms を知らない方々でしたので、htmx に加え a-blog cms についても詳しく説明する機会となりました。これにより、参加者には htmx と a-blog cms の両方の魅力を感じていただけたと思います。<br />
<br />
会場には、<strong>さくらインターネット 福岡オフィス</strong> をお借りしました。 <a href="https://appleple.sakuraweb.com/">htmx 化した さくらインターネット版「10万件のサンプルサイト 」</a></p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">



<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 id="tokyo">東京 / 2024年6月20日 9人</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-right acms-col-sm-6 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202406/mode3_w440-htmx-tokyo.png?v=20240621153447"
 width="440"
 height="247"
 alt="">
<p class="caption">東京</p>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>東京では、午後から仕事時間中に参加が可能な人が参加できるイベントと、仕事が終わってから参加しやすい夜の2部構成で行いました。<br />
<br />
htmx のために Ajax 関連の機能についてアップデートがされた a-blog cms 3.1.17 と htmx 2.0 にメジャーバージョンアップされた新しいハンズオンサイトも準備しての開催となりました。具体的な事例としては FAQ コンテンツを htmx を活用して実装するには、どう作るべきかなど、実際のプロジェクトでの活用方法についても触れ、多くの参加者にとって有意義な時間となりました。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">



<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 >最後に</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">



<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>まだ使い始めて4ヶ月くらいで、利用している機能は紹介しているものくらいなので、まだまだ知らない機能も多くあるのではと思っています。持っている情報はできるだけ共有させていただきました。<br />
<br />
また、他の地域での勉強会やオンラインイベントも企画を進めておりますので、こんな使い方もオススメだという情報をお持ちの方がいたら、ぜひご参加いただき教えていただけると助かります。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->























































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->










]]></description>
<category>イベントレポート</category>
<guid isPermaLink="true">https://stage.appleple.com/blog/event-report/htmx-beginner-workshop.html</guid>
<pubDate>Fri, 21 Jun 2024 17:51:04 +0900</pubDate>
</item>
<item>
<dc:creator>appleple</dc:creator>
<title>運用中の Webサーバーに Cloudflare を導入する方法</title>
<link>https://stage.appleple.com/blog/server/cloudflare-introduced.html</link>
      <description><![CDATA[















































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->










































<!-- media -->
<div class="column-media-auto acms-col-sm-12 ">

<a href="https://stage.appleple.com/media/002/202405/DALL%C2%B7E_2024-05-28_10.43.25_-_A_simple_design_featuring_the_word_%27Cloudflare%27_in_orange%2C_accompanied_by_a_cloud_icon._The_design_should_be_minimalist_with_clean_lines_and_a_modern_.png?v=20240528104624"data-rel="SmartPhoto">
<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202405/mode3_w920-DALL%C2%B7E_2024-05-28_10.43.25_-_A_simple_design_featuring_the_word_%27Cloudflare%27_in_orange%2C_accompanied_by_a_cloud_icon._The_design_should_be_minimalist_with_clean_lines_and_a_modern_.png?v=20240528104624"
 width="920"
 height="525"
 alt="Cloudflareの文字と雲のロゴがある画像">
</a>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 >Cloudflare とは？</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>より良いインターネットの構築をミッションとして作られたもので、ネットワーク / クラウド / アプリケーションをより安全でパフォーマンスが高くあらゆる接続を実現する統合プラットフォームです。これは <em>コネクティビティクラウド</em> と呼ばれていて <a href="https://www.cloudflare.com/ja-jp/learning/cloud/what-is-a-connectivity-cloud/" target="_blank" rel="noopener noreferrer">Cloudflare でも言及</a>されています。そのコネクティビティクラウドを Cloudflare ではどう実現するかについて、「マルチクラウド環境およびハイブリッドクラウド環境を含む、あらゆるタイプのクラウドインフラストラクチャのための一元化されたコントロールプレーンとしての役割を果たす」と表現しています。大雑把にいうと、「クラウドで必要なセキュリティを一元管理できる」ということだと思います。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>では、クラウドで必要なセキュリティとはなんでしょうか？<br />
Cloudflare はプランによってできることが増えるのですが、今回はフリープランを元に話を進めていきますので、フリープランで使えるWebサイトのセキュリティに関わる機能をまとめてみました。<br />
</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <ul class="normal">
<li>DNS</li>
<li>従量制の DDoS 保護</li>
<li>CDN</li>
<li>ユニバーサルSSL証明書</li>
<li>無料のマネージド ルールセット</li>
<li>ウェブ アプリケーション ファイアウォール (WAF)</li>
<li>3 ページルール</li>
</ul>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>※ これは 2024/4 時点です。詳しい内容は<a href="https://www.cloudflare.com/plans/" target="_blank" rel="noopener noreferrer">こちら</a>です。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>一番のメリットは CDN が使えてパフォーマンスの向上につながることだと思います。また CDN を導入することで、Webサーバーの負荷を軽減できたり、重複トラフィックの削減が見込めます。加えて SSL が利用できるので、SSL のないサーバーを利用しているサービスにもおすすめです。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 >Cloudflare の導入</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>導入にあってですが、ドメイン / DNS / Webサーバーが必要です。今回は、ドメインをお名前.com、DNS を Cloudflare、Webサーバーを Xserver でテストしています。Cloudflare にもドメインの発行とサーバーレスが使えるのですが、運用中の Webサーバーに導入というタイトルですので利用していません。サーバーレス機能の <a href="https://developers.cloudflare.com/workers/" target="_blank" rel="noopener noreferrer">Workers</a> は Webサーバーとしては使用しませんが、キャッシュ機能を実現するために後でご紹介します。また、Webアプリケーションは弊社開発の a-blog cms を使用してテストしています。本記事は a-blog cms とは関係ない内容ですが、a-blog cms を使用する場合に a-blog cms で設定が必要な箇所が出てきますので、掻い摘んで説明していきます。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>add site から サイトの登録を行います。ステップは ドメイン設定 → プラン → DNS設定 → アクティベーション があり、基本的には add site の流れに沿っていただければ大丈夫です。一つだけ注意点があり、アクティベーションの際にDNS が割り当てられます。この DNS は取得したドメインに割り当ててください。お名前.com を使用している場合は、お名前.com 管理画面からドメインを選択し、ネームサーバー情報から DNS の変更ができます。また、アクティベーションには最大24時間かかる可能性があるのでご注意ください。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-12 ">

<a href="https://stage.appleple.com/media/002/202405/domain.png?v=20240528111720"data-rel="SmartPhoto">
<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202405/mode3_w920-domain.png?v=20240528111720"
 width="920"
 height="460"
 alt="add site の画面">
</a>
<p class="caption">add site の画面</p>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>Cloudflare の導入だけであればこれで完了です。ただ、これだけだと Cloudflare を通っているだけで、オリジンサーバーに接続していてメリットがありません。SSL の設定がうまくいっておらず、表示すらできなくなっているかもしれません。次からのセクションで Cloudflare が動作するように設定していきます。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 >Cloudflare SSL/TLS</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>まずは SSL の設定が必要です。Cloudflare では無料で SSL を提供おり、SSL/TLS から設定できます。4つのモードがあり、以下の設定ができます。<br />
</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">













<!-- テーブル -->
<div class="column-table">
  <div  class="entry-container">
  <table class="table-border js-table-unit-scroll-hint">
<tr>
<th>Off (not secure)</th>
<td>暗号化（SSL）は適用されません 。</td>
</tr>
<tr>
<th class="  acms-cell-text-nowrap acms-admin-cell-text-nowrap">Flexible</th>
<td>ブラウザと Cloudflare 間のトラフィックを暗号化します。</td>
</tr>
<tr>
<th>Full</th>
<td><div>サーバー上の自己署名証明書を使用して end-to-end で暗号化します。<br></div></td>
</tr>
<tr>
<th>Full (strict)</th>
<td>エンドツーエンドで暗号化します。サーバー上に信頼できる CA または Cloudflare Origin CA 証明書が必要です。</td>
</tr>
</table>

  </div>
</div>
































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>ここで一つ注意点があり、http に アクセスすると https にリダイレクトするという処理が Webサーバーで行われている場合、end-to-end でSSL化する必要があります。end-to-end というのは、ブラウザと Cloudflare の間と、Cloudflare と Webサーバーの間を指します。もし、Cloudflare から Webサーバー へ http で通信しようとするとリダイレクトループが発生します。なので、cloudflare から Webサーバーの間は、SSLの設定をしておかなければなりません。既に Webサーバーで SSL化されている場合は、リダイレクト処理がされてある可能性があるのでご注意ください。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>a-blog cms でも、htaccess（Apache Webサーバーの設定ファイル） で SSL アクセスについての記述がありますので、Cloudflare からアクセスするときは SSL でないとリダイレクトされてしまいです。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-12 ">

<a href="https://stage.appleple.com/media/002/202405/cloudflare-ssl-tls-connect.png?v=20240528105158"data-rel="SmartPhoto">
<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202405/mode3_w920-cloudflare-ssl-tls-connect.png?v=20240528105158"
 width="920"
 height="352"
 alt="Cloudflare のSSL設定画面で使われているコネクト画像">
</a>
<p class="caption">SSL/TLS の設定画面</p>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 >CDN のキャッシュ</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>次にキャッシュについてです。運用をしていると、全てをキャッシュするのではなく特定の場合にはキャッシュさせたくない状況も出てきます。例えば、CMS の運用でユーザーがログインし記事を更新する際にキャッシュが効いていると、更新したのに以前の情報が表示されてリアルタイムな情報でなくなってしまうので、キャッシュサーバーではなくオリジンサーバーにアクセスさせる必要がある場合です。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>特定のURLパターンで判別する場合は <a href="https://developers.cloudflare.com/cache/how-to/cache-rules/" target="_blank" rel="noopener noreferrer">Cache Rules</a> を使って GUI で設定することができます。管理ページであれば URL が閲覧ページとは別のものになると思いますので Cache Rules が使えます。しかし、Cookie や Request Header のみで判断する場合、Cache Rules で設定しきれない時もあります​。そういった時は、Workers を利用することで解決できます。Workers は、Javascript または WebAssembly を使用して、リクエストに対してプログラム的な操作を行うことができます。よって、Cookieやヘッダー・リクエストの種類など、リクエストの詳細に基づいて複雑なキャッシュの決定や制御を行うことができるようになります。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >Workers で Cookie を利用したキャッシュ動作の判別を行う</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>Workers &amp; Pages &gt; Create application &gt; Create worker で Workers が作成できます。作成画面では、既に Hello, World! の文字列をレスポンスで返す処理がされているのですが、そのままデプロイしていただいて大丈夫です。そうすると以下の画面が表示されるので、Edit code からキャッシュの処理をしていきます。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-12 ">

<a href="https://stage.appleple.com/media/002/202405/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2024-05-20_10.32.18.png?v=20240520103417"data-rel="SmartPhoto">
<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202405/mode3_w920-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2024-05-20_10.32.18.png?v=20240520103417"
 width="920"
 height="466"
 alt="Cloudflare Workers デプロイ後の画面">
</a>
<p class="caption">Cloudflare Workers デプロイ後の画面</p>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>Edit code の画面では、先ほど作成した Workers の処理（Hello, World! の文字列をレスポンスで返す）が書かれています。このコードを Cookie によってキャッシュの処理を切り替えるコードに置き換えます。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <pre><code class="javascript">addEventListener('fetch', event =&gt; {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const cookie = request.headers.get('Cookie')
  if (cookie &amp;&amp; cookie.includes('acms-logging-in=administrator')) {
    // ログインしている場合はキャッシュをバイパス
    return fetch(request)
  } else {
    // ログインしていない場合はキャッシュされたコンテンツを利用
    return fetch(request, { cf: { cacheTtl: 7200 } })
  }
}
</code></pre>

  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>上記のコードは HTTPリクエストから処理を行うためのサンプルコードで、Cookie に <code>personal-blog-logging-in=administrator</code> があるかどうかによってキャッシュの利用を決めています。ご利用される場合は、ご自身の環境によって Cookie のキー、値を変えるようにしてください。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>a-blog cms の場合、 v3.1 から<code>/private/system.default.yaml</code> に <code>extra_logged_in_cookie: on</code> を追記すると、ログイン時に Cookie を残せるようになっています。さらに、<code>extra_logged_in_cookie_name: "personal-blog-logging-in"</code> のように追記をすると Cookie に登録するキーを変更することができます。この設定でできた Cookie を条件にして キャッシュにすると、ログイン時だけオリジンサーバーにアクセスするようになります。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>Workers の作成ができたら、どの URL で利用するか指定しなければなりません。Websites &gt; 利用しているサイト &gt; Workers Routes &gt; Add route から URL と Workers の指定ができます。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>これで設定が完了しました。最後にきちんとキャッシュが動作しているかを確認してみます。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >Cloudflare の動作を確認</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>ブラウザからレスポンスヘッダーを確認してみてください。そこに <code>Cf-Cache-Status</code> があると思います。以下の画像は Google Chrome の検証ネットワークタブから確認しています。このステータスがあると Cloudflare を通して実行されています。ここの値が <code>HIT</code>​ だとキャッシュが返ってきており、<code>BYPA SS</code> または <code>DYNAMIC</code>​ だとオリジンサーバーにアクセスされています。<code>BYPASS</code> は意図的（ヘッダーなどによるキャッシュルール）によるキャッシュ無視を示し、<code>DYNAMIC</code> は動的コンテンツを示します。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-12 ">

<a href="https://stage.appleple.com/media/002/202405/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2024-05-22_10.59.20.png?v=20240522110003"data-rel="SmartPhoto">
<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202405/mode3_w838-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2024-05-22_10.59.20.png?v=20240522110003"
 width="838"
 height="270"
 alt="Cloudflare のキャッシュ動作を確認する検証画面">
</a>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 >Cloudflare Zaraz に少し触れてみる</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>Cloudflare には <a href="https://developers.cloudflare.com/zaraz/" target="_blank" rel="noopener noreferrer">Zaraz</a> というサービスもあり、サードパーティツールが管理できます。今回試したのは Google Analytics 4（以下、GA4） の連携です。Zaraz を使用すると、Tag Manager や Analytics へブラウザからアクセスし計測するのではなく、Cloudflare が GA4 と連携してくれるのでパフォーマンスの向上に繋がります。また、クライアントのIPアドレスをGoogle側に送信しない設定ができるので、高いプライバシーを実現することができます。しかし、Webサイトにスクリプトを読み込まずに GA4 がデータを収集できる反面、　Webサイトの読み込みが必要な計測ができなくなる可能性があります。状況に合わせて利用していただければと思います。<br />
詳しくは、<a href="https://developers.cloudflare.com/fundamentals/reference/google-analytics/" target="_blank" rel="noopener noreferrer">CloudflareでGoogle Analyticsを使用する</a> をご確認ください。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->























































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->










]]></description>
<category>サーバー</category>
<guid isPermaLink="true">https://stage.appleple.com/blog/server/cloudflare-introduced.html</guid>
<pubDate>Tue, 11 Jun 2024 12:22:18 +0900</pubDate>
</item>
<item>
<dc:creator>appleple</dc:creator>
<title>モバイルフレンドリーなイメージビューワー SmartPhoto.js の利用方法</title>
<link>https://stage.appleple.com/blog/oss/smartphoto-js.html</link>
      <description><![CDATA[















































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->




























<!-- 画像 -->

<div role="figure" class="column-image column-image-auto align-auto  acms-col-sm-12" aria-labelledby="image-caption-14062">
  <a href="https://appleple.github.io/SmartPhoto/"  data-group="" data-caption="">
    <img
      
      class="columnImage unit-id-14062"
      src="https://stage.appleple.com/archives/002/201704/3aa947667897160ca892594025faf06123a57c1cf12ca433951cf869eec195b9.png"
      alt=""
      width="920"
      height="393"
      loading="lazy"
      decoding="async"
    >
  </a>
</div>































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>スマートフォンで写真をタップすると、もともと表示されているサイズより小さく表示されるような体験をしたことはありませんか？ 2017年にリリースした SmartPhoto.js は、スマートフォンで写真を大きく見たいを実現するために用意したライブラリーです。</p>
<p>弊社の Github 公開しているライブラリの中では、一番 ★ の多いライブラリーで、2024年5月6日現在で <strong>894</strong> となっています。よろしければ <a href="https://github.com/appleple/SmartPhoto">https://github.com/appleple/SmartPhoto</a> の右上にある ★ のクリックをお願いします。</p>

  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->























































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->










]]></description>
<category>OSS</category>
<guid isPermaLink="true">https://stage.appleple.com/blog/oss/smartphoto-js.html</guid>
<pubDate>Mon, 06 May 2024 22:39:53 +0900</pubDate>
</item>
<item>
<dc:creator>appleple</dc:creator>
<title>Facebookページで管理者を追加する方法 2024年春版</title>
<link>https://stage.appleple.com/blog/sns/add-admin-facebook-page2024.html</link>
      <description><![CDATA[















































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->












<!-- ユニットグループの開始タグ -->
<div class="js-unit_group-align acms-entry-unit-full acms-col-sm-2">





<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>　</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->











<!-- ユニットグループの終了タグ -->
</div>


<!-- ユニットグループの開始タグ -->
<div class="js-unit_group-align acms-entry-unit-full acms-col-sm-10">



<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-12 ">

<a href="https://stage.appleple.com/media/002/202404/Facebookpage.png?v=20240424105005"data-rel="SmartPhoto">
<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202404/mode3_w920-Facebookpage.png?v=20240424105005"
 width="920"
 height="600"
 alt="">
</a>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>Facebook の管理者のアカウントを追加する場所がどこにあるのか迷子になって追加するのに苦労しました。この情報もいつまで有効か分かりませんが、2024年春の段階のFacebookページで管理者を追加する方法を紹介しておきます。</p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h2 >Facebookの管理者を追加する手順</h2>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >1. ユーザーを Facebook ページの管理者 に切り替えます</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<a href="https://stage.appleple.com/media/002/202404/SCR-20240424-jedd.png?v=20240424095813"data-rel="SmartPhoto">
<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202404/mode3_w600-SCR-20240424-jedd.png?v=20240424095813"
 width="600"
 height="219"
 alt="">
</a>


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >2. 設定とプライバシー をクリックします</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202404/mode3_w600-SCR-20240424-ivpt.png?v=20240424095431"
 width="600"
 height="316"
 alt="">


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >3. 設定をクリックします</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202404/mode3_w600-SCR-20240424-ivum.png?v=20240424095431"
 width="600"
 height="216"
 alt="">


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >4. ページ設定をクリックします</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202404/mode3_w600-SCR-20240424-iwci.png?v=20240424095431"
 width="600"
 height="447"
 alt="">


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >5. ページアクセスの（見る）をクリックします</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202404/mode3_w600-SCR-20240424-iwhu.png?v=20240424095431"
 width="600"
 height="242"
 alt="">


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >7. 追加ボタンをクリックします</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202404/mode3_w600-SCR-20240424-izue.png?v=20240424095431"
 width="600"
 height="260"
 alt="">


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >8. 新しく追加のウィンドウが表示されます。次へをクリック</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202404/mode3_w560-SCR-20240424-jacw.png?v=20240424095431"
 width="560"
 height="430"
 alt="">


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >9. 追加したい人の名前を入れて検索します</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202404/mode3_w562-SCR-20240424-jajw.png?v=20240424095431"
 width="562"
 height="626"
 alt="">


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >10. アクセス許可の設定を行います</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202404/mode3_w561-SCR-20240424-jaqp.png?v=20240424095431"
 width="561"
 height="695"
 alt="">


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <h3 >11. あなたのパスワードを入力します</h3>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->














<hr class="clearHidden">





























<!-- media -->
<div class="column-media-auto acms-col-sm-8 ">

<img class="js-lazy-load columnImage"
 src="/themes/system/images/placeholder/image.svg"
 data-src="https://stage.appleple.com/media/002/202404/mode3_w564-SCR-20240424-jban.png?v=20240424095431"
 width="564"
 height="310"
 alt="">


</div>
















<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->
















<!-- テキスト -->
<div class="entry-text-unit">
  
  <p>これで、無事に管理者を追加することができました。 </p>
  
</div>










































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->







<!-- ユニットグループの終了タグ -->
</div>

















































<!-- セル固定テーブル -->



<!-- 吹き出し -->





<!-- 余白 -->










]]></description>
<category>SNS</category>
<guid isPermaLink="true">https://stage.appleple.com/blog/sns/add-admin-facebook-page2024.html</guid>
<pubDate>Wed, 24 Apr 2024 09:55:03 +0900</pubDate>
</item>
</channel>
</rss>
