Output Diary

プログラミング × 読書 のアウトプットを発信しています

フォームデータの送信

f:id:kina_kq:20210503082752j:plain

 

Webは基本的なクライアント・サーバー構成に基づいています。

クライアント(Webブラウザ)はHTTPプロトコルを使用してサーバーにリクエストを送ります。サーバーは同じプロトコルを使用してリクエストに答えます。

 

クライアント側において、HTMLフォームはサーバーへデータを送信するHTTPリクエストを組み立てるための、便利でユーザーに使いやすい手段でしかありません。

フォームによって、ユーザーがHTTPリクエストで渡す情報を提供することができます。

 

クライアント側:データ送信方法の定義

 

<form>要素で、データを送信する方法を定義します。

重要な属性はactionmethodの2つです。

 

❏ action属性

action属性はどこにデータを送信するかを定義します。

値は妥当な相対 / 絶対URLでなければいけません。

絶対URL

<form action="http://example.com>"

 

相対URL

<form action="/somewhere_else">

 

属性を指定しない場合

<form>

 

<form>要素はフォームが表示されているページ自身に対してデータを送信します。

 

❏ method属性

どのようにデータを送信するかを定義します。

HTTPプロトコルはリクエストを実行するための方法をいくつか提供しており、HTMLフォームのデータは複数の方法で送信することが出来ます。

もっとも一般的なものはGETメソッドPOSTメソッドです。

 

❍ GETメソッド

GETメソッドは、サーバーに対して指定したリソースを返すよう求めるためにブラウザが使用するメソッドです。

まず、ブラウザは空の本文を送信します。

本文が空であるため、フォームをこのメソッドで送信する場合はデータをURLの後に付加します。

<form action="<http://foo.com>" method="get">
  <div>
    <label for="say">What greeting do you want to say?</label>
    <input name="say" id="say" value="Hi">
  </div>
  <div>
    <label for="to">Who do you want to say it to?</label>
    <input name="to" id="to" value="Mom">
  </div>
  <div>
    <button>Send my greetings</button>
  </div>
</form>

GETメソッドが使用されているため、フォームを送信するときにブラウザのアドレスバーにwww.foo.com/?say=Hi&to=MomというURLが表示されます。

 

URLに追加されたデータは名前と組の連続になっています。

URLのWebアドレスが終了した後、疑問符(?)に続いて名前/値の組がそれぞれアンパサンド(&)で区切られて入ります。

  • say の値は Hi
  • to の値は Mom

HTTPリクエストは以下のようになります

GET /?say=Hi&to=Mom HTTP/1.1 Host: foo.com

 

❍ POSTメソッド

このメソッドはHTTPリクエストの本文で提供したデータを考慮したレスポンスの要求を、ブラウザがサーバーへ送信するためのメソッドです。

このメソッドを使用してフォームを送信する場合は、データがHTTPリクエストの本文の後に追加されます。

<form action="<http://foo.com>" method="post">
  <div>
    <label for="say">What greeting do you want to say?</label>
    <input name="say" id="say" value="Hi">
  </div>
  <div>
    <label for="to">Who do you want to say it to?</label>
    <input name="to" id="to" value="Mom">
  </div>
  <div>
    <button>Send my greetings</button>
  </div>
</form>

データがPOSTメソッドで送信されると、URLにはデータが追加されません。

HTTPリクエストは以下の通りです。

POST / HTTP/1.1
Host: foo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

say=Hi&to=Mom

プログラミング言語について調べてみた。

f:id:kina_kq:20210502082147j:plain

 

プログラミングの言語は、

ある程度のユーザーがいる言語に限っても250以上の種類のプログラミング言語が存在していると言われています。

 

しかし全ての言語が今も使われているわけではなく実際に使用されているのは全体の10%程度です。

 

今日はプログラミング言語で使われている代表的なものを

いくつか取り上げ徹底的に調べていこうと思います。

 

 

目的別プログラミング言語

 

プログラミング言語は、言語によって得意とする分野は異なります。

今回はWeb開発のプログラミング言語を5種類説明していきます。

 

Web開発

アプリ開発

サーバーサイド開発

AI / 機械学習

 

 

Web開発

 

Web開発では、WebアプリケーションのプログラミングやWebシステム、Webソフトウェアの開発を行う仕事です。

 

Webサイト上で使用されるアプリケーションを設計、構築、開発する職種を、

Webエンジニアと呼んでいます。

 

要件定義に従って作成された仕様書などからプログラミングをしていく職種をプログラマーと呼ばれています。

 

❏ 使う言語一例

JavaPHPPerl

RubyPythonJavaScript

SQL 

などを用いて開発が行われています。

 

📍Java

Javaは、GitHubでも最も人気の高い言語で、静的型付けコンパイル言語として使われています。

Webシステムから基幹システム、ゲーム、スマホアプリまで様々な分野で使われており、大規模開発では定番の言語です。

銀行系やeコマースなどの大手企業の開発案件ではJavaが圧倒的なシェアを持っています。

 

学習難易度は高めです。

フレームワークもありますが、それ以外にサーブレットJSPも含めて習得すべき事が多いので、初心者にはハードルが高いといえます。

 

📍PHP

PHPは、1996年度に誕生した言語で、

Webのサーバーサイドで用いられている動的型付け言語です。

 

データベースとの連携に強く、HTMLに埋め込む形でコードを実行することもできるため、WEB開発において非常によく使用されている言語です。

また、ソースコードの可読性が高く、基本的なルーチンの作り方や処理、命令文の形式を理解できれば、すぐにアプリ開発を行う事ができます。

Q-Success「W3 Techs」

上記の画像の通り、世界のWEBサイトの80%近くPHPは使われており、

絶大的な人気を保持し続けています。

 

とても人気がある言語なので、日本語の参考書や解説サイトが豊富に揃っており、初学者でも勉強しやすい言語であるといえます。

 

PHPで、ブログ&掲示板サイトやECサイト、社内管理システム、お問い合わせフォームなどを作ることが出来ます。

 

📍Ruby

 Rubyは、1995年に一般公開された言語で、動的型付けスクリプト言語です。

日本で開発された言語であるため、日本国内でのコミュニティがとても活発です。

 

スクリプト言語であるため、文法が比較的簡単です。

初学者でRubyを選択する日本人も多いので、日本語の参考書や質問記事が充実しています。

2004年に誕生したRuby on RailsはWebアプリケーションを作成するためのフレームワーク(枠組み)で、これを利用してさまざまなアプリケーションの開発ができます。

 

Ruby on Railsを用いて、

アプリケーションサイト、ショッピングサイト、SNSサイトなどを作ることができます。

Wantedly  やAirbnbRubyが使われています。

 

📍 Perl

 Perlは1987年アメリカ人ラリウォールによって開発された言語です。

30年以上の歴史があり幅広い層に名前が知られています。

 

誰でも利用できる言語で、UNIXWindowsなどの環境下でも動作します。C言語シェルスクリプトなどの他言語の良い部分を取り入れて開発します。

現在ではPerlの他にもWeb開発に使われるメジャーな言語が増えているため、最近では使われなくなってきています。

 

特徴として、

・高い後方互換性がある

・テキスト処理に優れている

・可読性が高い

コンパイルが不要

があります。

 

📍 Python

 Pythonは1991年にオランダ人のグイド・ヴァンロッサムというプログラマーによって開発された言語です。

 

Pythonで、出来ることは多岐に渡っており、

組み込み開発や、Webアプリケーション、デスクトップアプリケーション、さらには人工知能開発、ビッグデータ解析などを行うことが出来ます。

 

主な特徴は、

少ないコードで簡潔にプログラムを書けることと、専門的なライブラリが豊富にあることです。

 

代表的はフレームワークとしてDjango(ジャンゴ)があります。

YoutubeInstagramDropboxPythonで作られています。

参考

【入門編ソースコード有】PHPとは?初心者向けプログラミング言語のPHPでできることも徹底解説 | パソナテック

【難易度順】プログラミング言語を一覧で一挙紹介! | パソナテック

開発言語7選! Web開発の人気プログラミング言語を比較 | テックキャンプ ブログ

プログラミング言語のRubyとは?特徴やできることを解説|発注成功のための知識が身に付く【発注ラウンジ】

Perlってどんな言語?できることやPython、Rubyとの違いを解説! | Geekly Media

Pythonとは?大人気プログラミング言語のメリットや活用事例をご紹介

 

一旦ここで切り上げて

また第二弾アプリ開発プログラミング言語について調べてみます(`・ω・´)ゞ

【ネットワーク】情報セキュリティ

f:id:kina_kq:20210501073339j:plain

 

コンピュータ技術を使用して、

さまざまな悪意をもったプログラムが仕掛けられることがあります。

 これらを総称してマルウェアと呼びます。

 

今日はマルウェアをいくつか紹介していきます。

 

コンピュータウイルス

 

他のパソコンを攻撃したり、情報を盗む目的で悪意をもった人間によって意図的に作られた不正なプログラムのことです。

 

ボット

 

処理を自動化するソフトウェアです。

ウイルス感染により、ボット化したPCは外部から遠隔操作が可能になり、一斉攻撃などの手法によって悪用されます。

ボットに感染したパソコンをゾンビパソコンと呼ばれています。

ゾンビパソコンがたくさん集まったネットワークは「ゾンビネットと呼ばれています。

 

スパイウェア

 

スパイウェアとはユーザーに気づかれずに、無断でコンピュータに不正侵入して、ユーザーの行動や個人情報を収集して送信するソフトウェアです。

 

ランサムウェア

 

コンピュータに保存していたデータを暗号化するなどして、使えない状態にし、元に戻す代わりに金銭を要求します。

 

ランサムウェアの感染経路としては、主に犯罪者が送付したメールの添付ファイルを開いたりしたことをきっかけにウイルスに感染します。

三者のウェブサイトを改ざんしてウェブサイトにアクセスしただけでウイルスに感染することもあるのでとても怖いウイルスです。

 

ワーム

ワーム(worm)とは英語で(細長く足のない)虫のことを意味します。

ワームの特徴として「自身で複製できる」「単独で活動できる」という特徴があります。

 

ワームの感染経路として、

メール・WEB経由外部記録媒体経由ネットワーク経由があります。

 

メール・WEB経由では、

メールに添付されるURLやWebサイトを開いたりすることによって感染することがあります。

 

外部記録媒体では、

USBメモリやCD、DVDから感染することがあります。

 

ネットワーク経由では、

インターネットからパケットとして飛んでくるものと、ファイル共有などで専用のプロトコルを利用するものがあります。

 

トロイの木馬

 

害のないプログラムを装い、侵入したコンピュータにバックドア(裏口:不正ログインできる出入口)を設置します。このように、コンピュータを遠隔操作できるようにするツールをRAT(Remote Access Tool)と呼びます。

 

<被害例>

・インターネットバンキングやネットショップを利用するタイミングでIDやパスワードを盗まれる

・デバイス内の個人情報を盗み見られる

・メール機能の悪用がされる

 

マクロウイルス

 

文書作成や表計算ソフトのマクロ機能を悪用したコンピュータウイルスです。

 

参考

マルウェア - Wikipedia

コンピュータウイルスの種類や基礎知識、セキュリティ対策について

スパイウェアとは?

ランサムウェアとは・・

【Rails】モジュール

f:id:kina_kq:20210430140755p:plain

 

 Rubyには、まとまりをもった設計図を一箇所にまとめた存在として、

「モジュール(Module)」という概念があります。

 

モジュールの特徴

 

moduleは、

classと同じようにmodule内に関数の定義をすることが出来ますが、

 

moduleには

インスタンスが生成できない

・継承出来ない

 といった特徴があります。

 

 

モジュール名の制約

 

モジュール名は必ず大文字から始めます。

このように書くと、

#=> SyntaxError: class/module name must be CONSTANT

というエラーが発生してしまいます。

 module hello→ module Hello としましょう。

 

モジュールを使う目的

 

名前空間の提供

インスタンスメソッドとして取り込む(Mix-in)

・モジュールをオブジェクトに取り込む(extend)

・モジュール関数

 

名前空間の提供

 

名前空間とは、クラスとモジュールに名前をつけていれるための入れ物やタグのことをいいます。この名前空間を使うことで名前のかぶりを回避することが出来ます。

 

呼び出しは、::演算子を使い、

「モジュール名::モジュール名」または「モジュール名::クラス名」として呼び出します。

 

インスタンスメソッドとして取り組む(Mix-in)

Rubyのクラスは単一継承(クラスを1つしか継承できないという設計)のみですが、

モジュールをクラスに取り組むことで多重継承を可能にしています。

 

Mix−inにすることで、

 クラスの肥大化を防いだり、クラスをまたがった同じ処理の繰り返しを防ぐことができます。

 

参考

Rubyのmoduleの使い方とメリットを理解して脱初心者!|TECH PLAY Magazine [テックプレイマガジン]

【Ruby入門】Rubyのモジュールの使い方 | UX MILK

RubyのModuleの使い方とはいったい - Qiita

はじめてのRuby!モジュール(module)の使い方を解説! | 侍エンジニアブログ

【Rails】NOT NULL制約とは

f:id:kina_kq:20210429084524j:plain

 

NOT NULL制約とは、

データベースのテーブルの項目につける制限(制約)のひとつで、

「空っぽの値(NULL)は入れちゃダメ制約」のことです。

 

NULLは「空だよー何も入ってないよー」ということをあらわす単語です。

NOT NULL制約が付与された項目にはNULLを入れることが出来ません。

 

NOT NULL制約とバリデーションではどう違う?

 

NOT NULL制約は、テーブルのカラムを定義します。

一方、バリデーションはモデルのバリデーションに記述します。

 

どっちもよく似ている感じがしますが、

両者の違いは空文字("")が許可されるかされないかの違いです。

 

「NOT NULL制約」は空文字が許可される一方、

バリデーションの「presence: true」では空文字は許可されません。

 

空文字含む全てのnullを許可したくない場合には「NOT Null制約」とバリデーションの「presence: true」の両方に記載しておくと安心です。

 

参考

IT用語辞典 NOT NULL制約

【Rails】1分で分かる!Not Null制約とpresence: trueの違いについて簡単にまとめてみた|TechTechMedia

 

 

【基本情報】テスト

f:id:kina_kq:20210428095102j:plain

 

今日は「テスト」についてまとめていきます。

 

人間によって書かれたプログラムにはどうしても記述ミスなどが発生してしまいます。

この記述ミスなどによる欠陥のことをバグと呼びます。

バグとは虫のことでその部分が食われているようなイメージです。

 

そんなバグを発見し無くすために「テスト」があります。

正しい品質のシステムを提供するためにはテストの存在はとても重要になってきます。

 

テストの流れ

 

単体テスト結合テストシステムテスト

 

単体テスト

 

テストは、まず部品単体の信頼性を確保するところから始まります。

この時に行われるのが、単体テストと呼ばれるやつです。

 

この単体テストでは、ブラックボックステストホワイトボックステストという手法を用いて検証を行います。

 

ブラックボックステスト

→システムの内部構造は考慮せず、仕様を満たしているかどうかのみを検証するテスト技法のことです。

ホワイトボックステスト

→システムの内部構造を理解した上で、それが意図通りに動作しているかを確認するテスト技法のことです。

 

結合テスト

 

単体テストがおわると、結合テストに入ります。

結合テストでは、複数のモジュールを繋ぎ合わせて検証を行い、モジュール間のインターフェースが正常に機能しているかなどを確認します。

 

結合テストでモジュール間のインターフェースを確認する方法にはトップダウンテストやボトムアップテストなどがあります。

 

トップダウンテスト

→上位モジュールから先にテストを済ませていくテストです。

 

ボトムアップテスト

→それとは逆で下位モジュールからテストを行うのがボトムアップテストです。

 

トップダウンテストとボトムアップテストを組み合わせて行う折衷テストや、

すべてのモジュールを一気につなげてテストをするビッグバンテストもあります。

 

システムテスト

 

最後はシステムテストです。

別名総合テストとも呼ばています。

 

実際に使用される状況と同じ設定でテストを行い、

開発したシステムが期待通りに動作するか、構築したシステムが仕様書通りの機能や性能要件を満たしているかについて検証します。

 

本番と同じ環境でテストをするので、開発環境では見つからなかったバグを発見することもあります。

 

納品前に全体を通したテストをすることで、システムの品質を確保することが出来ます。

 

参考

ブラックボックステスト~概要、技法、テスト観点について~ | ソフトウェアテスト・第三者検証ならウェブレッジ

みんな知ってるホワイトボックステスト、ブラックボックステスト。でもグレーボックステストとは…? | ハートランド・ザ・ワールド

システムテストとは?開発段階のテストの流れと主な種類|発注成功のための知識が身に付く【発注ラウンジ】

 

【ネットワーク】4Gと5Gの違いについて

f:id:kina_kq:20210426100120j:plain

 

 

今日は4Gと5Gの違いについてまとめていきます。

 

各世代の移動通信システム

 

f:id:kina_kq:20210426152246p:plain

画像引用元(https://linksmate.jp/article/mvno_3g/

 

GはGenerationの略です。

2000年代には入ってから、3Gが主流となりました。

世代があがるごとに速度が高速化されていっています。

 

現在ではまだまだ4Gが使われることが多いです。

徐々に5Gのエリアが拡大しつつあるといった感じです。

 

 

4G→5Gにするメリット

 

・通信速度を格段に上がる

・同時接続数も増える

・遅延が減る

の3つです。

 

1つ目の、「通信速度を格段に上がる」に関しては、

4Gの通信速度は100Mbps〜1Gbpsに対し、

5Gでは最大100Gbpsとなり、100倍以上速くなると予測がされています。

 

5GになることでYoutubeとかもサクサク見れそうですね👀

 

5Gになることのデメリット

 

デメリットもあります。

サイバー攻撃を受ける可能性があがるということです。

 

なぜなら、

同時接続数が増えることにより、

サーバー攻撃のターゲットも増えることになるからです。

 

 

まとめ

 

5Gに変わることにより、得られるメリットは大きいですが、

セキュリティには気をつける必要がありそうです。

 

利便性を取れば同時にセキュリティにも意識を向ける必要があるので、

利便性とセキュリティは表裏一体ですね。

 

参考

5Gって何がすごいの?4Gとの違いや未来に起こる変化を知ろう | WEB担当者の活用帖【ナレッジ・デポ】

3G、4G/LTE、5Gの違いとは?対応エリアなど3G、4G/LTE、5Gの疑問にリンクスメイトがお答えします! | リンクスメイト -LinksMate-

5Gとは?4Gとの違いやメリットデメリット、セキュリティ対策まで徹底解説