投稿者: ume

  • [Ubuntu]別名を設定

    はじめに

     例えばLaravelで使う[sail]ですが、フルパスを付けると[/home/○/○○/vendor/bin/sail]となります。毎回使うことを考えると、もっと短くしたいと考えるでしょう。
     ※○や○○には環境によって異なる値が設定されます。

    フルパスを調べる

     今どこにいるのか、カレントディレクトリを調べましょう。Ubuntuで次の命令を入れます。

    pwd

     うまく /home/○/○○/vendor/bin/sail の○部分を調べることができたでしょうか?

     次にUbuntuの設定ファイルに追記します。Ubuntuで次の命令を入れて、テキストエディターを起動します。

    vi ~/.profile

     コンソールにファイル内容が表示されたとおもいます。
    キーボードで「i」キーを押して、挿入モードにします。カーソルはファイルの先頭位置にあるとおもいます。その位置で次の行を挿入します。[○]部分は、先に調べたパスで置換してください。

    alias sail='[ -f sail ] && bash sail || bash /home/○/○○/vendor/bin/sail'

     次に[Enter]キーを押して改行します。そして[ESC]キーを押して挿入モードを終えます。
    ファイルを保存して閉じるために次の命令を入力して[Enter]キーを押します。

    :wq

     更新したファイルを反映させるために、Ubuntuへ次の命令を入力します。

    source ~/.profile

     これで別名の設定は終了です。[sail]と入力したらsailのヘルプが出てくるようになりましたか?

  • [Windows]Show-NetFirewallRule

     ファイアーウォールの設定を全量表示するときに、PowerShellでShow-NetFirewallRuleコマンドを使います。

     Show-NetFirewallRuleコマンドに先立ってDateコマンドを実行すると、Show-NetFirewallRuleの出力内容が要約されるようです。RemoteAddress部分が長いとき、Dateコマンドのあと(直後でなくてもよい)にShow-NetFirewallRuleコマンドを実行すると、RemoteAddressの値が{IPアドレス IPアドレス…}と省略されます。

  • [CGI]わかりやすさを目指して

    [CGI]わかりやすさを目指して

     カミュプリィの『西暦・年齢・和暦・干支対照表』CGIを書くときに気を付けたところは「コードのわかりやすさ」です。

    どのようにわかりやすくしたか?

     CGIはHTMLの内容を出力するプログラムです。表示された『西暦・年齢・和暦・干支対照表』でマウス右ボタンをクリックして「ページのソースを表示」で表示されたものを出力する処理をおこなっています。

     それならCGIが出力するHTMLの内容をそのままファイルに保存しておくのが、もっとも全体がわかりやすくなるとおもい、ざっくり次の内容でテキストファイルを保存しました。

    <!doctype html>
    <html dir="ltr" lang="ja" prefix="og: https://ogp.me/ns#" >
    <head>
    	<meta charset="utf-8">
    	<title>西暦・年齢・和暦・干支対照表</title>
    </head>
    <body>
    	<table>
    		<caption>西暦・年齢・和暦・干支対照表</caption>
    		<thead>
    			<tr>
    				<th>西暦</th>
    				<th>年齢</th>
    /* HEADER CREATE */
    				<th ID="ETO">干支</th>
    			</tr>
    		</thead>
    		<tbody>
    /* TABLE CREATE */
    		</tbody>
    	</table>
    <div class="indent">
    </div>
    </body>
    <footer>
    /* COPYRIGHT CREATE */
    </footer>
    </html>

     『/* HEADER CREATE */』『/* TABLE CREATE */』『/* COPYRIGHT CREATE */』部分のHTMLが足りていませんので、干支や和暦の情報をもとにCGIが補います。CGIには静的なHTMLが一切含まれないことで、読みやすくなっています。

    甲子 (きのえね)
    乙丑 (きのとのうし)
    丙寅 (ひのえとら)
     ・・・
    2019/05/01,令和
    1989/01/08,平成
    1926/12/25,昭和
     ・・・

     このCGIはPythonで作成しましたが、他の言語でも同様の工夫はできるのではないかとおもいます。

  • [CGI]サーバーをいたわってキャッシュを付けました

    [CGI]サーバーをいたわってキャッシュを付けました

     ユーザーのブラウザーから要求がある度にCGIを動かしていたらサーバーの生産性が低いです。特にカミュプリィの『西暦・年齢・和暦・干支対照表』CGIは1年に1回更新すればよい表ですので、要求の度にCGIを動かしていたら、、、うん、無駄よね。

    CGIの対応

     CGIですので実行結果は標準出力へHTMLの内容を出します。また、HTMLの内容をそのままキャッシュファイルにも書き出します。こうしてCGIを動かす度にキャッシュファイルが更新されるようにしました。

    HTTPサーバーの対応

     CGIを置いたディレクトリに「.htaccess」設定ファイルを作成します。URLの指定がディレクトリ止まりであれば、キュッシュファイルを優先して開くようにしました。
     次の例では「まるまる.html」キュッシュファイルが優先で、Pythonで書いた「まるまる.cgi」CGIが劣後になりましす。

    DirectoryIndex まるまる.html まるまる.cgi

     これで、普段はCGIを置いたディレクトリを呼び出すと、「まるまる.html」キャッシュファイルがクライアントに渡されます。
     キャッシュファイルがないときは「まるまる.cgi」CGIが呼び出されます。キャッシュファイルがないのは最初だけなので、ディレクトリを呼び出してCGIを実行するのは最初の1回だけですね、この設定は不要かもしれません。

    OSの対応

     タイマーで定期的にプログラムを開始できるクーロン(cron)で、毎年1月1日に「まるまる.cgi」CGIを呼び出します。

    管理者の対応

     年号が変わったときは、年号ファイルの設定を変更してから、CGIのファイル名を含めたURL「https://www.commuply.co.jp/tools/wareki/まるまる.cgi」をブラウザーから呼び出します。
     CGIのプログラム内容を変更したときもCGIのファイル名を含めたURLをブラウザーから呼びます。

  • [HTTP Server]httpからhttpsへの強制リダイレクト

     誰かが http://www.commuply.co.jp/ へアクセスしようとしても、必ずセキュリティ付きの https://www.commuply.co.jp/ を表示するように設定することができます。

     サイトの全体を変更するには、サイトの一番ルート部分にある .htaccess ファイルに次のおまじないを記載します。

    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

  • [DNS]メールサーバをDNSへ登録します

     インターネットメールが着信するように、メールサーバをDNSに登録します。

    (空欄) MX メールサーバ名 10

     ※最後の10は優先順位です。メールサーバがひとつしかないときは重要ではありません。

  • [Python]拡張子.pyのままCGIとして動かす方法

    .htaccessファイルに次の行を追記します。

    AddHandler cgi-script .py

  • [Python]CGIが外部ファイルを指定するときのパスの書き方

    CGIはサーバ上で動かすものなので、http のパスではなく、FTPでアクセスするときのパスで書きます。

  • [Python]先頭に書くコマンドパス

    Pythonプログラムの先頭に書くコマンドパスは次のようにします。

    !/usr/bin/python3.6

    StarServerでは次のようにすると動きませんでした

    !/usr/bin/env python

  • [Python]文字コードや改行コード

    StarServerに配置するPythonのCGIは、文字コードUTF-8、改行コードLFにしないと動きませんでした。

  • [Python]このプログラムのパス

     CGIとして呼ばれるPythonプログラムをつくって、Cronからも呼び出すようにしました。
    Pythonプログラムから、プログラムと同じディレクトリにある別のファイルにアクセスするようにしました。この実行中のプログラムファイルの絶対パスを取得しようと試行錯誤したのですが、結果はダメでした。仕方なくプログラムの絶対パスを定数としてプログラムに埋め込みました

     カレントディレクトリを取得する方法は次のようなものですが、CGIから呼び出されるときはプログラムのあるディレクトリと同じでした。Cronから呼び出すとプログラムとは異なるディレクトリになりました。

    import os
    カレントディレクトリ = os.getcwd()

    または

    import os
    カレントディレクトリ = os.path.abspath('./')

  • [Edge]ファイルを更新したのにブラウザが更新されない

     サーバに乗っけたCSSや.htaccessファイルなどを更新したのに、ブラウザで開いてみると更新されないってことが多々ありませんか?
    WindowsならMicrosoft Edgeの設定を変更して、ブラウザを閉じて開きなおせば最新のファイルを再読み込みしてくれるようにできます。

    まずMicrosoft Edgeを開きます。
    画面右上にある 『・・・』 から『設定』を選び、『プライバシー、検査、サービス』を開きます。
    『閲覧データをクリア』欄にある『ブラウザーを閉じるたびにクリアするデータを選択する』を開き、『キャッシュされた画像とファイル』をオンにします。

     これでMicrosoft Edgeを開きなおすたびに変更内容が反映されます。

  • [FTP]サーバへ保存するファイルは英数字にします

     ファイル名が日本語のファイルをFTPでアップロード/ダウンロードすると文字化けします。
    ファイル名は英数字にするようお願いします。

  • [DNS]wwwなしをwww付きURLへリダイレクト

     カミュプリィのウェブサイトwww.commuply.co.jpは、wwwなしのcommuply.co.jpでもアクセスできるように、DNSで同じIPアドレスを設定しています。
    ウェブサイトはwww付きのhttps://www.commuply.co.jp/ですよ!とご案内してますので、wwwなしでアクセスしてきたときはwww付きへ自動変換しています。

    (空欄) A IPアドレス
    WWW A IPアドレス

    参考にしたページはつぎのものです。
    【.htaccess】httpからhttpsへリダイレクト、wwwありなし統一、index.html(php)ありなし統一の設定方法&記述内容の意味

  • [Python]日本語対応するために

     Pythonのプログラムを日本語対応するために次のコードを追加します。

    import sys
    sys.stdin = open(sys.stdin.fileno(), 'r', encoding='UTF-8')
    sys.stdout = open(sys.stdout.fileno(), 'w', encoding='UTF-8')
    sys.stderr = open(sys.stderr.fileno(), 'w', encoding='UTF-8')

  • [JavaScript]Copyrightの年を常に今年に書き換えます

     ページの末尾にCopyrightを記載したサイトを見かけます。ちなみに『©』は『&copy;』と書くことで表示できます。

    Copyright © 2022 カミュプリィ (Commuply Inc.)

    年が入っているため更新しないでおくと、何年もサイトを更新していないように思われてしまいます。
    自動更新できないかなぁと考えました。

    HTML

     htmlのhead部分に使用するジャバスクリプトのファイルを記載します。

    <head>
    <script type="text/javascript" src="./loadevent.js"></script>
    </head>

     つぎに、実際に表示される年の数字部分に『currentyear』と名前を付けます。この名前をつけた部分をジャバスクリプトで書き換えます。

    <span class="currentyear">2022</span>

    JavaScript

     『currentyear』を今年へ書き換える関数を書きます。

    function updateyear() {
    let currentyear = document.getElementsByClassName(‘currentyear’);
    for(var i = 0, len = currentyear.length|0; i < len; i = i + 1|0) {
    currentyear[i].textContent = (new Date()).getFullYear();
    }
    }

     つぎに、htmlが表示されたときに『updateyear』を呼び出す設定をします。

    window.addEventListener('load', updateyear);

  • [CSS]左寄せ・右寄せで横に並べます

     カミュプリィのホームページの上部にある『カミュプリィ』は左寄せ、『個人情報保護方針』は右寄せになっています。

    HTML

    <div class="top">
    <div class="commuply"><a href="./index.html">カミュプリィ</a></div>
    <div class="privacypolicy"><a href="./aboutus/privacypolicy.html">個人情報保護方針</a></div>
    </div>

    CSS

    .top {
    display: flex;
    justify-content: space-between;
    }

    .top div {
    margin: 0 1rem; /* 外側の余白: 上下左右*/
    list-style: none;
    height: 2rem;
    line-height: 2rem;
    text-align: center; /* 文字の位置: 中央寄せ */
    }

    .top .commuply {
    text-align: left;
    }

    .top .privacypolicy {
    text-align: right;
    }
  • [CSS]タブのように等間隔で横並び

     カミュプリィのホームページの上部にある『ホーム』『ウェブ』『維持』『ついて』の4つのタブを等間隔で並べています。

    HTML

    	<div class="menu">
    <div class="current"><a href="./index.html">ホーム</a></div>
    <div><a href="./site-create/index.html">ウェブ</a></div>
    <div><a href="./system-keep/index.html">維持</a></div>
    <div><a href="./aboutus/index.html">ついて</a></div>
    </div>

    CSS

    .menu {
    display: flex;
    justify-content: space-between;
    }

    .menu div {
    list-style: none;
    width: 25%;
    height: 2rem;
    line-height: 2rem;
    text-align: center; /* 文字の位置: 中央寄せ */
    border: 1px solid white; /* 枠線 */
    background-color: #f7b977cc; /* 背景色 */
    }

    .menu div:hover {
    background-color: #f7b97777; /* 背景色 */
    }

    .menu a {
    display: block;
    color: black; /* 文字色 */
    text-decoration: none;
    }

    .current a {
    border: 2px solid; /* 枠線 */
    border-color: black white white black;
    background-color: #f7b977ff; /* 背景色 */
    }
  • [CSS]CSS・スタイルの書きかた

     タグのなかにstyle=”設定”と書く方法、<html>の<head>内に<style>~</style>と書く方法、別のファイルに書いて<html>の<head>内に<link rel=”stylesheet” href=”ファイル名.css”>と書く方法の3種類があります。
     いずれにしても、①どこへ適用するのか、②どの設定か、③どんな値かということを書いていきます。改行をいれて見やすくすることができますが必須ではありません。

    ①適用範囲 { ②設定: ③値; }

    ①適用範囲(セレクタ―)

     タグ名はそのまま入力します。クラス名は先頭に『.(ピリオド)』を付けます。アイディ名は先頭に『#(シャープ)』を付けます。全要素にするときは『*(アスタリスク)』です。
     複数の名前を空白で区切ると[または(OR)]という意味になり、適用範囲を広げられます。
     複数の名前を『,(カンマ)』で区切ると[かつ(AND)]という意味になり、適用範囲を小さくします。
     区切記号は他にも『>(不等号記号)』『+(プラス)』『~(チルダ)』があります。
     そして『[](角括弧)』や『:(コロン)』でさらに条件を付けることができます。

    ②設定(プロパティ)、③値(バリュー)

     設定できる項目は決まっています。

    CSS の基本 – ウェブ開発を学ぶ | MDN

  • [CSS]色を設定します

     CSSで色を指定できるところは、文字色(color:)、背景色(background-color:)、枠の色(border-color:)があります。
     カミュプリィのホームページではみかん色(#F08300)やあんず色(#F7B977)を多く使用しています。CSSでの指定は『color: #f08300』のようになります。

    色の番号は色見本のサイトで調べることができます。

    WEB色見本 原色大辞典


     同じ色の濃淡が必要なときは『color: #f08300cc』『color: #f0830077』のように濃さ(透過)の設定を加えます。透過を指定しない『color: #f08300』は『color: #f08300FF』と同じです。
     色の設定とは別に、濃さ(透過)のみ(opacity:)を設定することができます。画像の透過に役立てそうです。値は0から1までの数値か、0%から100%までの割合で設定できます。1または100%が透過しないという意味になります。

  • [CSS]文字の太さを設定します

     つぎのようにすると文字を太字にすることができます。本当は細かく太さを設定できるのですが、実際には普通と太字しか表示できないようです。

    font-weight: bold;  /* 太字 */
    font-weight: normal; /* 標準 */

  • [CSS]いちぶを隠します

     CSSを使用してHTMLの一部分をかくすことができます。

    display: none;

     状況にあわせて内容を表示するのに使えるかもしれませんね。

  • [HTML]改行をそのまま表示します

    改行を含んだ値を、そのまま表示するには次のようにします。

    <pre>値<pre>

  • [PHP]ブックマークから開いたときの前のページ

     前のページのURLを調べるときは、PHPで『$_SERVER[‘HTTP_REFERER’]』を使います。
    直接URLを開いたり、ブックマークから開いたりしたとき、『$_SERVER[‘HTTP_REFERER’]』はどんなURLになるでしょうか。
    試してみたところ空っぽでした。

     ちなみに<a href=””></a>と、hrefにブランクを渡すと現在のURLへのリンクになっていました。

  • [PHP]if-else分岐

    IF文での分岐は次のようになります。

    if(条件) {
    式;
    }

    if(条件) {
    式;
    } elseif {
    式;
    } else {
    式;
    }

  • [PHP]Laravelの開発環境をWindowsで整える

    はじめに

     WindowsパソコンにLaravelの開発環境を整えました。およそ次のとおりになります。

    1. WSL(WindowsでLinuxを使えるようにするもの)
    2. WSLにUbuntuをインストール
    3. WindowsにDocker Desktopをインストール
    4. UbuntuにLaravelをインストール

    WSL

     [コントロールパネル]>[プログラム]>[プログラムと機能]>[Windowsの機能の有効化または無効化]を開いて、次の項目にチェックを入れます。

    • Linux 用 Windows サブシステム
    • 仮想マシン プラットフォーム

     これをPowerShellで設定するには次のようにします。PowerShellは[管理者として実行]します。

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

    WindowsでWSL2を使って「完全なLinux」環境を作ろう!

     ここまで設定したら、一旦Windowsを再起動します。

    Ubuntu

     パソコンから目を離しても、Windowsがスリープしないように、[システム]>[電源とバッテリー]で設定しておきます。

     それでは、Ubuntuをインストールしましょう。PowerShellを[管理者として実行]し、次のようにします。

    wsl --install

     Ubuntuがインストールされると、新しいユーザーの名前とパスワードの登録がおこなわれます。
    ユーザー名とパスワードは何でもよいですが、ブランクにできません。このパスワードは頻繁に使いますので、しっかりメモしておきましょう。
     成功すると、[スタート]>[すべてのアプリ]に[Ubuntu]が登録されます。

    WSL を使用して Windows に Linux をインストールする

     次に、Ubuntuを更新しましょう。[スタート]>[すべてのアプリ]から[Ubuntu]を開いて、次のようにします。

    sudo apt update && sudo apt upgrade -y
    exit

     ここでWindowsを再起動します。

     もういちど、Ubuntuを開いて、次のようにします。

    sudo do-release-upgrade
    exit

     途中で[y]や[ENTER]の入力を求められます。

     更に、WindowsとUbuntuの改行コードの違いを吸収するために次のようにします。

    sudo apt-get install -y dos2unix
    find . -type f -print0 | xargs -0 dos2unix

    Docker Desktop

     次のサイトからWindows用のDocker Desktopをインストールします。これはWindowsのアプリです。

    ドッカーデスクトップ

     インストールが正常に終わると[Installation succeeded]と表示されます。そのあとDocker Desktopを開くとチュートリアルが始まりますが、とりあえずスキップしましょう。

    ララベルとドッカー

    Laravel

     Ubuntuを開いて、次のようにします。
    [○○]部分には任意のディレクトリ名を入れます。例えば[example-app]とすることができます。

    curl -s "https://laravel.build/○○?php=81" | bash
    cd ○○ && ./vendor/bin/sail up

     これで、開発環境は整いました。

    【Docker】Laravel Sailのインストールと使い方を確認

    Laravelを開く

     ここからは、コンピューターを開いてLaravelにアクセスするたびにおこないます。
    まずはUbuntuを開いて、次のようにします。

    cd ○○ && ./vendor/bin/sail up -d

     [○○]部分には、先に curl -s “https://laravel.build/○○?php=81” | bash したときの○○を入れます。
     次に、ブラウザを開いて http://localhost/ にアクセスします。無事にLaravelの画面が表示されたでしょうか。

     なお、Laravelを終わらせるには、次のようにします。

    ./vendor/bin/sail down

    おわりに

     開発環境の細かいところは、参加するチームによって色々と差異があるとおもいます。基本的なところが押さえられていたなら いいな..とおもいます。

  • [MariaDB]開発環境をととのえる

    はじめに

     Windowsに Apache HTTP Server、PHP、MariaDB をインストールして開発環境を構築してみます。
     最初は XAMPP をインストールしたのですが、あるとき動かなくなって、どうしたら復旧するのかわからなくなりました。「こんなことになるのなら個別にインストールしたほうがわかりやすくない?」とおもい、個別にインストールとセットアップをすることにしました。

    PHP(ピーエイチピー)

     最初に PHP をインストールします。PHP は次のリンクから、スレッドセーフのZIPをダウンロードします。ZIPファイルの中身をお好きなところへコピーします。

    https://windows.php.net/download

     『php.ini-development』ファイルをコピーして『php.ini』にします。
     そして『php.ini』の次の各行の先頭の『;』を取り除きます。

    • ;extension=pdo_mysql
    • ;extension_dir = “ext”

     Windowsの[設定]-[システム]-[バージョン情報]-[システムの詳細設定]で、[システムのプロパティ]-[詳細設定]タブを開き、下のほうにある[環境変数]ボタンを押します。[システム環境変数]の[Path]を編集して、PHP のファイルをコピーしたフォルダ(例: C:\PHP)を追加します。

    Apache HTTP Server(アパッチ)

     インストールファイルを次のリンクからダウンロードします。

    https://www.apachelounge.com/download/

     ダウンロードした ZIP ファイル中の『Apache○』フォルダごと、お好きなところへコピーします。
     そして『Apache○\conf\httpd.conf』の次の各行のように更新したり追加したりします。

    • Define SRVROOT “○:/Apache○”
    • ServerName localhost:80
    • Options FollowSymLinks
    • DirectoryIndex index.php index.html
    • LoadModule php_module (PHPのApache用DLLファイルのパス、例: C:/PHP/php8apache2_4.dll)
    • <FilesMatch “.php$”>(改行)AddHandler php-script .php(改行)AddType application/x-httpd-php .php(改行)</FilesMatch>
    • PHPIniDir “(PHPのフォルダ、例: C:\PHP)”

     設定が終わったら Apache を Windowsサービスに登録します。管理者モードでWindowsコマンドプロンプトを開きます。そして Apacheの bin ディレクトリへ移動するコマンド(例: CD /D ○:\Apache○\bin)を実行します。続けて『httpd.exe -k install』でサービスに登録されますが、まだサービスは開始されていません。

    MariaDB(マリアディービー)

     インストーラーを次のリンクからダウンロードします。

    https://mariadb.com/downloads/

     インストーラーを実行して、例えば次のように選択・入力していきます。インストールが完了すると、自動でサービスに登録され、開始されます。

    • New root password: (開発するときは指定しないほうが楽)
    • Use UTF-8 as default server’s character set: 選択

     次に『MariaDB\data\my.ini』を開いて確認します。『utf8mb4』は4バイト対応のUTF-8です。

    [mysqld]
    character-set-server=utf8mb4
    skip-character-set-client=handshake
     ・・・
    [client]
     ・・・

    おわりに

     最後にWindowsを再起動します。
     Apache のドキュメントルートは『○:\Apache○\htdocs』になります。このフォルダに *.php ファイルを置いて、ブラウザーから『http://localhost/○.php』を呼び出してみましょう。

  • [Windows]パスワードを変更する

     Windowsでパスワードを変更しようとするとき、通常は Ctrl + Alt + Delete キーを押してパスワード変更の画面をだします。

     リモートデスクトップからパスワードを変更するには Ctrl + Alt + End キーを押します。キーがかぶらないように工夫されていますね。

  • [C#]List<型>

    using System.Collection.Generic;
    List<型> 変数名 = new List<型>();
    変数名.Add(値); // 追加
    変数名[位置(0-)] = 値; // 更新、追加はできない
    変数名.RemoveAt(位置(0-)); // 削除
    値(true==削除した) = 変数名.Remove(値); // 削除
    変数名.Clear(); // すべて消去
    値 = 変数名[位置]; // 取得
    変数名.Sort(); // 並び替え
    件数 = 変数名.Count;
    位置 = 変数名.IndexOf(値); // -1 == 含まれない
    型[] = 変数名.ToArray(); // Listから配列へ
    foreach(var 一時変数名 in 変数名) { 値 = 一時変数名; }

  • [PHP]お問い合わせフォームをつくりました

     HTMLとPHPをつかって、お問い合わせ内容をメールで送信するものをつくりました。

    HTML

    <form action="PHPファイル名.php" method="post">
    <p>ご返信先メールアドレス<br>
    <input name="email" type="email" size="40"></p>
    <br>
    <p>ご用件を教えてください<br>
    <textarea name="body" required cols="40" rows="6" placeholder="ウェブサイト作成のご依頼ほか"></textarea></p>
    <p><input type="submit" value="送信"></p>
    </form>

    PHP

    <!doctype html>
    <html lang="ja">
    <head>
    <meta charset="utf-8">
    </head>
    <body>
    <main>
    <?php
    $email = $_POST['email'];
    $body = $_POST['body'];
    mb_language("Japanese");
    mb_internal_encoding("UTF-8");
    $headers = "From: $email";
    mb_send_mail($email, "お問い合わせ", $body, $headers);
    print ("お問い合わせありがとうございます");
    ?>
    </body>
    </html>