見出し画像

noteMap どんな言語を使って開発する?⑩


初めに

どんな言語とは、コンピュータ言語は何を使うかの意味です。
今回は画面とサービスの仕組みを作ります。
画面を定義するマークアップ言語はhtmlを使います。
サービスの仕組みのプログラムはphpとJava Scriptを使います。

どの部分の開発にどの言語を使うか選択を間違ったら、後で大変です。
コンピュータ言語は、人間が読める・読めないで大まかに分類します。
人間が読める言語であっても、読むのが難しいと仕組みが理解できません。

コンピュータの周りは毎年使えるものが変わってきます。
従来は使えるメモリやデータ量や機器が増えると言う変化でした。
今後はAIを使うかどうかという変化も考える必要があります。
その変化に対応するために、サービスを修正するときがやってきます。
言語が読めないと、そのサービスの修正ができません。
どんな言語を使って開発するかは、長くサービスするためにも重要です。

開発する言語の問題

地図表示の開発はhtml以外に選択の余地はありません。
Google Mapsの地図上にマーカーやルートを表示するロジックはJava Scriptなので、他の言語は考えられません。
サーバーのOSはlinuxなので、データベース(以下DB)の読み書きはPHPです。
以上を考慮すると、3つのコンピュータ言語を使うことになります。
マークアップ言語を除くと2つのプログラミング言語になります。
このプログラミング言語を1つに統一はできないでしょうか?

Java scriptでDBにアクセスできれば、言語の種類を増やさないで済みます。
Node.JSを使えば、Java scriptでDBにアクセスできるそうです。
しかし、Node.Jsを使うためだけにmysqlライブラリが必要になります。
ならばphpで良い、と諦めました。

プログラミング言語の統一

現有のロリポップサーバーを使う限り、html、Java Script、PHPを変えることはできません。
使用言語を減らすのではなく、同時に複数言語を使わないことにします。
機能を整理し、切り離すことで、プログラムの独立性を保ちます。
・最初の起動時はphpでDBを読み出し、処理を振り分ける。
・各処理でDBに書き込みが必要になったら、phpプログラムをpostする・。

具体的には以下のようになります。
起動時 記事IDを基に、PHPでデータベースから地図の種類を調べる。
    地図の種類によって必要な処理に振り分ける。
    次のコードです。

<?php
・・・
$url = $_GET['url'];
$uId = $_GET['uId'];
$aId = $_GET['aId'];
$title = $_GET['title'];

$host = "。。。";
$dbname = "。。。";
$user = "。。。";
$pass = "。。。";

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $SQL = "SELECT * FROM areas WHERE ArticleId = :articleId";
    $stmt = $pdo->prepare($SQL);
    $stmt->execute(['articleId' => $aId]);
    $area = $stmt->fetch(PDO::FETCH_ASSOC);
    $param = "?url=".$url."&aId=".$aId."&uId=".$uId."&title=".$title;
    if ($area) {
        $mapType = $area['MapType'];
        $lat = $area['Lat'];
        $lng = $area['Lng'];
        $newUrl = $area['NewUrl'];
        $oldUrl = $area['OldUrl'];
        $articleId = $area['ArticleId'];
        $userId = $area['UserId'];
        if ($mapType == 1) {
          ・・・
        } elseif ($mapType == 9) {
            header("Location: $newUrl");
        } else {
            echo "Invalid MapType.";
            exit();
        }
    } else {
        header("Location: noteMapNew.html".param);
    }
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}
?>

処理時 振り分けられた後の地図の処理はGoogle Mapsで行います。
    Google MapsはhtmlとJava Scriptが基本の開発言語です。
    この考え方は、Google Maps以外の地図にも提供できます。
書込時 Google Mapsがデータを保存する必要が生じます。
    必要なデータが揃ったら、書き込みプログラムをpostします。
    post後のphpのプログラムのコードです。

<?php
$servername = "。。。";
$username = "。。。";
$password = "。。。";
$dbname = "。。。";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    echo "接続失敗✖";
    die("Connection failed: " . $conn->connect_error);
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $mapType = $_POST['mapType'];
    $orgUrl = $_POST['orgUrl'];
    $uId = $_POST['uId'];
    $aId = $_POST['aId'];
    $title = $_POST['title'];
    $lat = $_POST['lat'];
    $lng = $_POST['lng'];
   ・・・
    $sql = "INSERT INTO areas (MapType, OrgUrl, UserId, ArticleId, Title, Lat, Lng ・・・)
            VALUES ('$mapType','$orgUrl','$uId', '$aId', '$title', '$lat', '$lng' ・・・')";
    if ($conn->query($sql) === TRUE) {
	    echo "Data inserted successfully";
    } else {
	    echo "Error: " . $sql . "<br>" . $conn->error;
    }
}
$conn->close();
?>

API APIはphpで開発します。
    note記事と地図urlの公開APIでと考えています。
その他 Webページからのデータベースの読み書きです。
    地域別の記事一覧表示とか地図種類別の一覧とかの表示です。
つまり、最初はPHPで、その後は開いた地図が指定する

終わりに

プログラミング言語についてはいろいろ試行錯誤しました。
最初は地図の作り方に捕らわれていましたが、試行錯誤を重ねていくうちに拘りが消えて良き、地図ごとの最適な言語に任せることにしました。
地図タイプ毎に独立したプログラムにして、それを起動することで独立させることができたからからです。
独立性を高めたのは、①起動時の振り分けと②書き込み処理のpostでした。
今回の判断の善し悪しは、これから開発が進んでくるに従って、新しい機能を追加するときの難易度で判断できるかと思います。


人生最後のプロジェクト
高齢者の妄想 ビットコインを自分で作ってみたが失敗
Coincheckのアカウント登録が拒否されました
これから始める 人生最後のプロジェクト①
人生最後のプロジェクト note記事と地図を連携させたい
noteMap構想 開発するときの頭の中③
noteMapサービス 中の人と外の人④
noteMap GoogleにChrome拡張を申請⑤
noteMap Googleから申請却下の返事⑥
noteMap Googleからまたもや申請却下⑦
noteMap Chrome Web Storeに登録された⑧
noteMap これからどうする⑨
noteMap どんな言語を使って開発する?⑩(本記事)


よろしければサポートお願いします! いただいたサポートは全て『「思い出の場所」の記事とGoogle地図を関連付けるWeb地図アプリ』のLancersでのプログラミングの外注に使わせていただきます。 よろしくお願いします。