年: 2021年

  • CRUDとは

    CRUDとは

    よく聞くCRUDとは何か、整理できてなかったからまとめてみた。

    システムの最低要件

    システムを作るとき、めっちゃ簡単に言うとWebサイトを作るときに最低限必要と言われている要件のこと。

    Create

    CreateのC、「作成」とか「登録」とか表現する。

    Twitterだとツイート機能、ブログだと投稿機能。

    これらがCreateにあたる。

    Read

    ReadのR、「参照」とか「閲覧」のこと。

    サイトを見る(=閲覧)のに必要な機能。

    これがないと何も始まらない感じはある(=なくても良い珍しいシステムもあるかもだけど)。

    Update

    UpdateのU、「更新」のこと。

    一度作ったブログ記事を更新したりできる。

    珍しく(?)TwitterにこのUpdate機能はない。一度投稿したら、そのツイートを描き直すことはできない。

    Delete

    DeleteのD、「削除」のこと。

    間違えて投稿したツイートを削除したり、誤った情報を載せたブログ記事を削除したりするやつ。

    まとめ

    システムに必要な機能の頭文字を取っている。

    機能を指してるだけで、HTTPメソッドとは似ているが全く別物。

    CRUDの中にHTTPメソッドが含まれているイメージ。

  • Seederとは

    Seederとは

    会社のインターンで「Seeder」に遭遇した。

    Seederとは何かまとめた。

    Seederに遭遇した状況

    会社のインターンに参加して初日に開発環境構築をしてた。

    会社ではLaravelを使っている。

    会社の仕様書があって、それ通りにパソコンの環境を揃えていた。

    Docker内に環境を作っていたが、本番環境と同様のDBをmigrateで生成した。

    https://sunablog.tokyo/2021/08/11/post-2091/
    Migrationについては、この投稿を参考

    そのあとに「Seederを実行するように」と言われた。

    ここで初対面した。

    Seederでできること

    Seederを使うとDBにダミーデータを挿入することができる。

    下からの説明を見れば分かる。

    Seederに実行方法

    以下のようにコマンドを実行するとUserTableSeeder.phpというファイルが生成される。

    php artisan make:seeder UserTableSeeder

    このファイル内のrunメソッドにDBのtableに挿入したい実際のデータを記述する。

    例えば以下のようになる。

    <?php
    
    namespace Database\Seeders;
    
    use Illuminate\Database\Seeder;
    use Illuminate\Support\Facades\DB;
    
    class UserTableSeeder extends Seeder
    {
        public function run()
        {
            DB::table('users')->insert([
                'name' => 'suna',
                'email' => 'suna_sample@email.com',
                'sex' => 'male'
            ]);
        }
    }

    これのみだとSeederファイルを設定しただけなので、これを実際に作動させれるようにDatabaseSeeder.phpファイルで先ほどのUserTableSeeder.phpが呼び出されるように処理を書く。

    <?php
    
    namespace Database\Seeders;
    
    use Illuminate\Database\Seeder;
    
    class DatabaseSeeder extends DatabaseSeeder
    {
        public function run()
        {
            $this->call('UserTableSeeder::class');
        }
    }

    これでプログラムは完了。

    次のコマンドを実行することで、実際にSeederが作動してDBにデータが挿入される。

    php artisan db:seed --class=UserTableSeeder
  • コンピュータの基本

    コンピュータの基本

    コンピュータは外身のハードウェアと中身のソフトウェアに2つによって構成されている。

    コンピュータは命令とデータをまとめて配置して処理する方法(ストアードプログラム方式)によって作動している。

    ハードウェア

    5大要素

    そのハードウェアは5つの装置によって構成されている。

    • 入力装置
    • 出力装置
    • 記憶装置
    • 演算装置
    • 制御装置

    入力装置

    コンピュータが実行するプログラムを外部から記憶装置に転送する。

    出力装置

    プログラムの実行結果を外部に出力する。

    記憶装置

    主記憶装置(メモリ)と補助記憶装置(HDD、SSD)によって構成されている。これらはプログラムの実行結果を置くために用いられている。主記憶装置は高速で動作し、半導体によって作られている。補助記憶装置は大容量で安価である。

    演算装置

    加算、減算といった計算を行う。

    制御装置

    プログラム中のデータや命令を取り出して、命令に応じて使用箇所を決定する。

    CPU

    現在では演算装置と制御装置を合わせてCPUと呼ぶ。

    ソフトウェア

    ソフトウェアはOSとアプリケーションに分類される。

    アプリケーション

    単にソフトを呼ばれることも。WordやExcelなどが有名。

    OS

    ハードウェアを効率よく管理し、ユーザやソフト開発者が利用しやすい環境を提供する。

  • 物理削除モデルと論理削除モデル

    物理削除モデルと論理削除モデル

    Laravelを勉強している過程で遭遇したワード。DBにあるデータを論理削除モデルを使って削除した。

    物理削除モデル

    DBにあるデータを削除したいとき、普通(?)はこっちの削除を行う。

    名前通り、データを物理的に削除する。

    削除したデータはDBからも削除されているため、完全に削除されて復元することができない。

    論理削除モデル

    こっちはデータを「論理的」に削除する。

    DBに削除フラグを設けて、そのデータを削除するときはフラグをtrueにする。削除フラグがfalseのデータのみ返せば、一見するとデータが削除されたように見える。

    感想

    「なるほどな」と思った。

    データを完全に削除しないから、データを復元できる = 間違えて削除しても大丈夫!みたいな感じです。

    でもデータが増える一方で容量を食いそうだから少し心配だけど、そもそもデータを削除する機会って少なそうだからあまり心配しなくても良さそうだなとも思う。

    あと「論理削除モデル」で調べたら、検索結果がLaravelだらけだった。もしかしたらLaravelでは特徴的なDBの設計方法なのかもしれない。

  • 【ど基礎】仮想化・Dockerについて

    【ど基礎】仮想化・Dockerについて

    仮想化とは

    1台のサーバー上で複数のOSを同時に動作させること。元のサーバーを「物理サーバー」、仮想化されたサーバーを「仮想サーバー」と呼ぶ。

    仮想化でできること

    本来は1台の物理サーバーに対して1つのOSしか稼働させることができないが、仮想化させることによって1つのパソコンで様々なOSを稼働させることができる。

    ソフトウェアによって複数のハードウェアを統合することで、1台のサーバーが複数のサーバーのように振る舞うことができる。

    仮想化のメリット・する意味

    仮想化することによって複数のサーバーを柔軟に分割・統合することができる。

    仮に20%しか使っていないサーバーが5台あったときに、仮想化技術を用いてこれらを統合することができれば、サーバー1台でこれらを賄うことができる。これによってハード代も節約できるし、これに伴う場所代も浮かすことができる。

    仮想化ソフトウェアの種類

    • ホスト型
      • VirtualBox (Oracle)
    • ハイパーバイザー型
      • VMware ESX
    • コンテナエンジン
      • Docker

    ホスト型

    OSに仮想化ソフトウェアをインストールして、その上で仮想マシンを稼働させる。

    ハイパーバイザー型

    ホストOSを使用せず、サーバーに直接インストールして仮想環境を作る。

    コンテナ型

    ホストOSにコンテナエンジン(=仮想化ソフトウェア)をインストールして、その上にコンテナを設置する。

    Dockerとは

    コンテナ技術が特徴的な仮想化ソフトウェア。

    Dockerを使うメリット

    ほかの仮想化ソフトウェアでも同じだけど、環境の設定すらコードで書けてしまうから開発環境を簡単に揃えることができる。複数の人と開発するときにとても便利なのである。

    ほかの仮想化ソフトウェアとの違いはイマイチ分からん。

  • Laravelと相性がいいCSSを紹介!

    Laravelと相性がいいCSSを紹介!

    Laravelを自作するときに、まずLayoutのテンプレートを用意しようと思った。そのときに、「あれっ、CSSってどうしたらいいんだ」ってなったから、調べたやつ。

    Tailwindcssを使おう!

    結論はTailwindcssというCSSのフレームワークを利用しよう!インストールする方法は以下の記事を参照!

    https://sunablog.tokyo/2021/08/09/post-2150/

    このフレームワークを使えば、短いコードで簡単にCSSを反映させることができる。

    Laravel-mixを準備する方法

    あまりよく分かってないけど、Laravel-mixっていうLaravelと相性がいいやつがあるみたい。それを準備する方法を教えるよ!

    次のコマンドをターミナルで実行します。

    % npm install tailwindcss
    % npm install
    % npm run dev

    recources > css > app.cssに以下のコードを追加する。

    @tailwind base;
    @tailwind components;
    @tailwind utilities;

    同様に、webpack.mix.jsに以下のコードを追加する。

    mix.js('resources/js/app.js', 'public/js')
        .postCss('resources/css/app.css', 'public/css', [
            // 以下を追加する
            require('tailwindcss')
        ]);

    ターミナルで再度、以下のコマンドを入力する。

    % npm run dev

    これを実行すると、public > css > app.cssにTailwindcssが記述されるようになる。

    最後にこれをlinkタグでフロントエンドに持ってくる必要がある。Laravelで実行する場合は以下。

    <link rel="stylesheet" href="{{ asset('css/app.css') }}">

    これで準備万端!素敵なプログラミングライフをっ!

  • Laravelでアプリケーションを開発するときの大まかな流れ

    Laravelでアプリケーションを開発するときの大まかな流れ

    今日はLaravelでアプリケーションを開発するときの大まかな流れを備忘録として説明したいと思います。

    アプリケーションの立ち上げ

    まずはLaravelでアプリケーションを立ち上げます。次のいずれかのコマンドを入力して、アプリケーションを作成します。ちなみにアプリケーションの名前をlaravel-appとしています。ここは皆さんの任意の名前をつけてください。

    $ composer create-project 'laravel/laravel=8.5.19' --prefer-dist laravel-app
    $ laravel new laravel-app

    このどちらかのコマンドを実行するとlaravel-appというアプリのデフォルトが作成されます。

    DBを用意する

    今度はアプリケーションで用いるDBを用意します。これにはLaravelの特徴的な要素でもあるMigrationファイルを用いて用意します。

    Databese自体の用意

    その前に、LaravelではDBの中身をいろいろと操作できますが、唯一Laravelからだとできない操作が「Database自体の作成」です。まずはDBの作成を直接しましょう。ターミナルからMySQLに接続したら、以下のコマンドでDatabaseを作りましょう。ちなみに、Databaseの名前はlaravelにしました。

    mysql> CREATE DATABASE laravel

    これを実行すると”Query OK, 1 row affected (0.00 sec)”と返ってきて、Databaseを作成することができます。

    tableの用意

    次にそのDatabaseにtableを用意します。ここからのDB周りの操作はすべてLaravel上で作業できますので、次のようにファイルを書いてください。

    そもそもですがMVCモデルをとっているLaravelにおいて、DBとやりとりをするのはModelなのでまずはModelらへんを見ていくことにしましょう。まずターミナルで次のコマンドを実行してください。仮のtable名はmemoです。

    $ php artisan make:model Memo -m

    上記のコマンドを実行することで「app > Models」にMemo.phpというModelファイルが生成されます。加えて上記のコマンドに”- m”というオプションを付けることで、migrationファイルを一緒に生成してくれます。このmigrationファイルは「database > migrations」にファイルを生成した日時と先ほど命名したModel名の複数形と、、、などが命名されたmigrationファイルが生成されます。今回、作成したファイルでいうと「2021_08_06_174912_create_memos_table.php」というファイルが生成されました。

    migrationファイルの編集

    それぞれのmigrationファイルを編集して、対応するそれそれのtableの仕様を書いていきます。

    migrationファイルを編集し終わったら、ターミナルで以下のコマンドを実行します。

    $ php artisan migration

    このコマンドによってMySQLに先程書いた仕様が反映されたtableが生成されます。MySQLで以下のコマンドを実行すると、実際にtableが作成されたのが確認できます。

    mysql> show tables from laravel

    ログイン機能を実装する

    今度はcomposerを用いて、手軽にログイン機能を実装しましょう。まずは以下のコマンドを入力してください。

    $ composer require laravel/ui
    $ php artisan ui bootstrap --auth
    $ npm install && npm run dev

    これらのコマンドを実行すると、認証周りの機能とBootstrapのデザインを用いて実装することができます。実際にLaravelを”php artisan serve”で起動して、サイトを見てみると、サイトの右上に「Login(ログイン)」と「Regester(登録)」のボタンが増えているのが確認できます。

    このRegesterボタンをクリックして、遷移したページで情報を入力すると、実際にユーザー登録もできますし、登録したユーザーの情報もDatabaseのUsersテーブルで確認することができます。

    Laravelのテンプレートファイル

    • @extends
    • @yield
    • @section

    上記の3つを用いて、サイトのviewをテンプレート化する!

    軽く触れておくと、テンプレートファイル化しておくていちいち同じ構造を書き直さなくてもいいから、汎用性が高くなるよ!これくらいの説明でも伝わるよね?!

    @extends

    • 子要素に用いる
    • @extends(‘layouts.auth’)と書くと、そのファイルは親要素であるlayouts > auth.blade.phpに当て込まれる

    @yield

    • 親要素
    • @yield(‘content’)と書くと、子要素の@section(‘content’) ~ @endsection部分を親要素に出力できる

    @section

    • 子要素
    • @section(‘content’) ~ @endsectionと書くと、@extends(‘layouts.register’)で指定したファイル(今回だとlayouts > register.blade.php)の@yield(‘content’)部分に出力したコードを表示できる

    Form周りの作り方

    LaravelでForm周りの作り方を説明する。

    Formを作るときの注意点

    Webアプリケーションを作るときに、 Formを作ることは頻繁に登場する。このときにformの開始タグの直後に次のコードを挿入しておいてほしい。

    <form action="/" method="POST">
        @csrf
        <input type="text">
        <button type="submit">送信する</button>
    </form>

    この「csrf」はCross-site Request Forgeryの略で、認証済みユーザーに代わって不正なコマンドを実行する、悪意のある攻撃の一種である。「@csrf」をinput開始タグの直後に挿入することで、LaravelはCSRFトークンを生成して、このCross-site Request Forgeryを防止することができる。詳しいことは別記事に記載するが、Laravelではこのコマンドを入力することでこのCross-site Request Forgeryを防止することができる。

    dd関数について

    dd関数とは、引数に変数(もちろん文字列でも数値でもいいが、目的には適していない)を入力すると、ブラウザでその引数の中身を参照できる。要はデバック用の関数で、開発の際はこのdd()に変数を入れるとよい。またdd()はそこで処理が止まるので、それ以降のコードは読まれない。

    また似たような関数にdump関数があるが、これはdd()とは異なりdump()以降のコードも読まれる。

  • tailwindcssをインストールできなかった話【解決済み】

    tailwindcssをインストールできなかった話【解決済み】

    今回は僕がLaravelでアプリケーションを作成しているときに遭遇したTailwindcssをインストールできなかったお話とそれを解決した方法をご紹介したいと思います。

    問題が生じた背景

    僕はYoutubeの教材でLaravelを用いたアプリケーションの開発の勉強をしていました。その教材ではcssのデザインにTailwindcssという、cssのフレームワークを使うそうでした。教材の冒頭でLaravelをインストールし終わったあとに、このTailwindcssもインストールするように案内されます。そのときの教材に書いてあるコードは以下です。

    npm install tailwindcss

    これをターミナルに入力して実行しました。すると次のようなエラーが返ってきました。

    npm ERR! code ENOTDIR
    npm ERR! syscall open
    npm ERR! path /Users/tomoyasusunagawa/node_modules/color-name/npm-shrinkwrap.json
    npm ERR! errno -20
    npm ERR! ENOTDIR: not a directory, open '/Users/tomoyasusunagawa/node_modules/color-name/npm-shrinkwrap.json'
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /Users/tomoyasusunagawa/.npm/_logs/2021-08-09T08_50_35_395Z-debug.log

    最初はビックリしましたが、よく読むと真ん中ら辺に「npm-shrinkwrap.jsonはディレクトリではありません」みたいなことを言われています。

    解決した方法

    (そんなこと、僕に言われても)という気も一瞬しましたが、すかさずGoogle先生に聞いたところ、次のように実行すると期待通りにTailwindcssをインストールできると書いてありました。

    $ cd [PATH_TO_DIR]
    $ npm init -y
    $ npm install tailwindcss postcss-cli autoprefixer

    作業ディレクトリに移動して、npmパッケージを使う準備をして、tailwindcssのインストールをする、的な意味のコマンドらしいです。

    無事にさきほどのエラー文も返って来なくなったので、正常にインストールできたことが確認できました。

  • Laravelでartisanがないって言われたとき

    Laravelでartisanがないって言われたとき

    Laravelでお馴染みのartisanを使おうと思ったら、できなかったので備忘録です。

    起きたときの背景

    Laravelで新しいアプリケーションを作ろうとして、ちょうど新しくLaravelアプリを作成したところでした。

    デフォルトのアプリも用意し、MySQLの用意したので早速artisanでModelから作ろうかと思ったそのとき、以下のようなメッセージに見舞われました(汗)。

    % php artisan make:model Memo -m    // 入力したコマンド
    Could not open input file: artisan    // 出力されたメッセージ

    artisanのファイルがない、みたいなことを言われました。artisanは何にでも使うので僕は心配になって、Googleさんに解決方法を尋ねました。しかしこの問題は簡単に解決できました。

    ディレクトリが違うだけ

    見出しの通りです。僕はアプリケーションのディレクトリではなく、その1つ上のディレクトリにいました(汗)。

    完全に自分の不注意だったわけですが、change directoryでディレクトリを移動した僕のターミナルには今度は次のような結果が返ってきました。

    % php artisan make:model Memo -m
    Model created successfully.
    Created Migration: 2021_08_06_174912_create_memos_table

    無事にModelは作成され、一緒にMigrationファイルも生成されました。

    皆さんもディレクトリには注意しましょう。

  • Laravelで新しいWebアプリを始める方法

    Laravelで新しいWebアプリを始める方法

    タイトルの通りです。この夏にWeb開発を勉強しようと思って、ReactやVue.js、Ruby on Railsなどで迷ったのですが、Webサイト制作上がりでPHPは理解しているのでなるべく勉強の負担を減らそうと考えて「Laravel」をフレームワークに選びました。

    以前にFuel PHPを使っていたのですが、Webサイト制作でとっくに忘れました。

    Laravelでアプリを始める

    自分のパソコンにLaravelをインストールできたら、アプリケーションを作成したいディレクトリまで移動します。そこで次のコマンドを入力してください。以下の「〇〇」にはディレクトリの名前というか、アプリケーションの名前を入力してください。

    $ laravel new 〇〇

    これを入力するとLaravelの初期の状態のアプリケーションが作成されます。

    「laravelコマンドがない」と言われたとき

    プログラミングにはエラーがつきものです。上記のコマンドを入力して以下のように返されることがあります。

    zsh: command not found: laravel

    このように言われたときは以下のコマンドを実行して、パスを通しましょう👍

    $ export PATH="$PATH:$HOME/.composer/vendor/bin"

    これは ~/.composer/vendor/bin のパスを通すコマンドで、これを実行するとlaravelコマンドが使えるようになるそうな。

    以上、よいプログラミングライフを!