学習記録

セキュリティ

【目的】

・セキュリティ対策について学ぶ

 

【学習概要

ソフトウェアを開発する上で起こる問題を理解

 

【学習内容

1.脆弱性

セキュリティの弱点を作り出す仕様上の問題点のこと

 

1−1脆弱性によって持たされる被害

個人情報漏洩

Webページの改ざん

Webページの利用不可

 

2.JavaScriptによる攻撃

JavaScriptはクライアントサイドで動くプログラミング言語のため、何らかの方法で悪意のあるJavaScriptのプログラムをユーザーがWebアプリケーションを表示したブラウザに埋め込めばユーザーにそのプログラムを実行させることができる

 

学習記録

コマンドの仕組みと管理ツール

【目的】

・環境構築に必要なコマンドとソフトウェアの仕組みを理解する

 

【学習概要

環境構築で使用したツールを学ぶ

パッケージ管理ツールで管理する理由を学ぶ

 

【学習内容

1.シェル

ターミナルとOSを繋ぐ窓口役

ターミナルから入力されたコマンドを読み取ってOSに対して指示を渡し、結果をターミナルに返して表示や実行などの動作をさせる

シェルがターミナルとOSの間に挟まってコマンドによる命令と実行結果の橋渡しをしている

 

2.zsh

シェルの一つ

ターミナルでecho $SHELLとコマンドを実行すると現在使用しているシェルはzshであることがわかる

プロンプトが%である

 

3.PATH

環境変数と呼ばれるOSようの変数

PATHに絶対パスを保存してアプリケーションのありかを示せば、どこからコマンドを実行してもアプリケーションのコマンドを打つことができる

 

4.コマンドとアプリケーションの関係

 

コマンドラインツール

コマンドで操作するアプリケーションのまとまり

コマンドラインツールを導入することで、OSが始めからコマンドで操作できるアプリケーションのファイのアプリケーションをPCにインストールできる

 

・Command Line Tools

macOS専用のコマンドラインツール

macOSでは元々Linuxコマンドで操作出来るアプリケーションや機能を標準搭載している。Linuxコマンド以外で操作するアプリケーションの多くはCommmand Line ToolsのインストールによってまとめてPCに導入できる

 

5.パッケージとバージョンの管理(Homebrewの必要性)

・依存関係

あるファイルやライブラリが正常に作動するために、別ファイルやライブラリによる処理と結果が必要になる状態を依存と呼び、その関係を依存関係と呼ぶ

例)ライブラリAを処理して作動するライブラリBは、依存関係にあると言える

実際は大量のライブラリ同士が複雑に依存関係にあるため管理するツールが必要になる

 

6.パッケージ管理ツール

パッケージとはプログラムや処理をひとまとめにしたもののこと。ライブラリとも言えるがパッケージは複数のライブラリをまとめていることもある。

パッケージ管理とはパッケージやパッケージが持つライブラリなどの依存関係を考慮してインストールやバージョンアップを行う管理のこと。

 

・Homebrew

macOSのパッケージ管理ツール

macOS上で作動するアプリケージョンの多くがHomebrewからインストールできる

 

7.バージョン管理

変更したバージョンを記録あるいは外部から保存して過去のバージョンや最新のバージョンに切り替えることなどをバージョン管理という

 

 

 

 

 

 

 

 

 

学習記録

読みやすいコードの書き方

【目的】

・自分で読みやすいコードを描けるようにすること

 

【学習概要

関数名・変数名の命名

複雑なロジックを避けたコードを書く

有効なコメントを書く

 

【学習内容

1.読みやすいコードの必要性

生産性・保守性の向上

柔軟な開発体制が構築できる

 

1−1.読みやすいコード

変数名(関数名)が他者から見ても分かりやすい

複雑なロジックがない

コメントが記載されていて全体像が把握しやすい

 

1−1①.分かりやすい関数名・変数名

具体的な名前をつけること

例)const addTask

  const userId

 

1ー1②.複雑なロジックの回避(リファクタリング

❶ネスト中のネストを避ける

例)ifのなかにifを記述しない

  演算子を用いて単純化する

 

❷条件式はあらかじめ関数化しておき、それを呼び出す形で記述する

 

❸複雑な条件式を分解して、複数のif文にわける

 

1−2.コメントで正確な情報をつたる

コメントを残す場面

・複雑なロジックを記述した場合、処理の概要と自分の考えをコメントで残す

・なぜその処理をしているかコメントを残す

 

コメントを残すべきでない場面

・コメントの補足コメント(コメントは一文にする

・複雑なソースコードを補足するコメント(複雑なソースコードを修正する方を優先)

 

 

 

おわり

 

 

 

 

学習記録

改善・保守管理

【目的】

・既存のアプリケーションに対して改善をして知識を増やす

 

【学習概要

各課題に対してリファクタリングの実施

 

リファクタリング……ユーザーからみたアプリの動作は変えずに内部のコードを整理(

          異なる文法で端的なコードに変更したり、新しいメソッドなど

         を使用して書き換える)すること

<メリット>

1.理解しやすいコードになる(理解の時間短縮・説明しやすい資料になる)

2.簡単になったコードは修正の際、修正箇所が最小限になる。(修正の時間短縮)

3.簡単になったコードは修正の際、間違いが減る(やり直し工数の低減)

 

<デメリット>

1.リファクタリング自体の実施に手間がかかる

 

課題については省略

 

おわり

学習記録

ユーザー認証

【目的】

・ユーザー認証の方法を学ぶ

 

【学習概要

デプロイの実施

ユーザー認証によってアクセスを制限

 

【ユーザー認証の手順

1.Basic認証を導入

デプロイされたサービスに対して使用できるユーザーを制限するためにBasic認証を導入する

 

Basic認証 ... HTTP通信の規格に備え得つけられているユーザー認証の仕組み

      サーバーとの通信が可能なユーザーとパスワードをあらかじめ設定してお 

      き、それに一致したユーザーのみが利用できるようにする

 

1ー1.Basic認証Railsアプリケーションへ導入

authenticate_or_request_whith_http_basicメソッドを使用して導入する

 

authenticate_or_request_with_http_basicメソッド ...

Rails内部でBasic認証を実装するために使用する。ブロックを開き、ブロック内部でusernameとpasswordを設定する

 

<コード>

コントローラーへ以下を記述

①bedire_action:basic_auth

 →befor_actionでBasic認証を呼び出す

 

②authenticatie_or_request_with_http_basic do | username, password |

username == '〇〇'   &&   password =='2222'

 →特定のusernameとパスワードを設定

 

1ー2Basic認証のコードを改良

不正にコードを読まれBasic認証を突破されるため環境変数を利用する実装に切り替える

 

1ー3環境変数を記載

zsh(ズィーシェル)に記載

bash(バッシュ)に記載

 

vimに記載(ヴィム)によって指定したファイルの編集をターミナルから行う

 

 

おわり

 

 

学習記録

デプロイ

【目的】

・サービスを公開する手法を学ぶ

 

【学習概要

各種必要な用語の学習

Herokuというサービスを使用

 

【サービスを公開する手順

1.デプロイ(以下①,②の作業のことをデプロイと呼ぶ)

①サーバーを用意

②用意したサーバーに作成したWebアプリケーションを動かす

 

ユーザーはデプロイされたアプリケーションへアクセスできる。

 

<予備知識>

デプロイするためのサーバー ... AmazonGoogleなどの企業が一般向けにレンタルして

               いる。

               Herokuというサービスを利用する

 

1ー①.サーバーの用意

Herokuを使用してサーバーを用意する

(Herokuでアプリケーションを操作する場合、Gitで管理しているリポジトリをHerokuへ反映する)

 

<予備知識> 

Heroku ... アプリケーションの公開、運用を行うためにサーバーを提供するサービス

     基本無料でデプロイの手間が少なく容易というメリットがある

 

 

おわり

 

 

 

 

学習記録

変更に強いコードの記述

【目的】

JavaScriptの開発に必要な知識を学ぶ

APIについて学ぶ

 

【学習概要(実装について大まかに何をしたか)】

今回は実装やコードの記述は無し、テキストを学習

・アプリケーションの仕組み

・サーバーサイドとフロントエンドの分離の必要性

 

【学習の流れ】

アプリケーションの仕組み

アプリケーションはAPI(別のアプリケーションにリクエストを送り情報を受け取る仕組み)でできている

 

API

Application Programming Interfaceの略

主にアプリケーション同士がデータをやり取りする場合に使用するルール・仕組みのこと

抽象的な意味で「このリクエストがきたらこのデータを返す」という仕様のことを指したり、「呼び出したら実行されるメソッド」を指す場合もある。例としてrenderメソッドなどはRailsAPI

 

WebAPI

HTTP/HTTPS通信を使用して利用するAPIのこと(Google Map Platform)

Google Map Platform ... Google MapがWebサービスに組み込まれている仕組みを可能にする

 

オープンAPI(公開API

外部に公開されているAPI(外部APIと呼ばれることもあり)

 

内部API

自社や個人が開発したアプリケーションの内部で取り扱うAPI

前回学習した題材は地震のために使っているため内部APIに該当

 

APIに適したアプリの作成

APIに適したアプリの開発のために以下のことはしない

Ajaxの内部にHTMLを受け取る

      ↓

HTMLなどのビューファイルは作成せずに、

APIは常にデータを返却することだけを責務にする

 

rails newのapiオプション

rails newコマンドに--apiというオプションをつけるとhtml.erbなどのビューファイルが自動で作成されないようになる

 

サーバーサイドとフロントエンドの分離

フロント専用でビューファイルを観覧できるようにアプリケーションを作成する

 

分離するメリット

分離することで、以下の点でチーム開発時に担当を分けやすい

・サーバー側とフロント側で扱う言語が違う

・サーバーサイド側はデータを渡すところまで行うため計算処理などのパフォーマンス

 改善の分野に精通している必要がある

・フロントエンド側はHTMLをはじめとしたマークアップスキルとJavaScriptなどのイベ

 ント駆動を扱うスキルを知っておく必要がある

 

ネイティブアプリケーションへの展開

APIを使用することでネイティブアプリケーションの開発も円滑に進めることができる

 

ネイティブアプリケーション

スマートフォンを使用しApp storeGoogle Play Storeでダウンロードできるアプリ

開発には以下の言語を使用する

iOS ... Objective-C, Swift

android ... Java, Kotlin

 

クロスプラットフォームマルチプラットフォーム

iOSandroidのどちらにも互換性のある開発フレームワーク

 

クロスプラットフォームでない ... Java, Swift

クロスプラットフォーム ... React Native, Flutter

 

クロスプラットフォームにおけるAPIのメリット

フロントエンドはサーバー用・iOS用・andoroid用でそれぞれ作り

サーバーサイドは1つのAPIで済む

 

おわり