Java 学習メモ
Javaの概要
https://qiita.com/KenyaSaitoh/items/22f32b9d7aea5844d77
- Javaの言語特性(抜粋)
- プラットフォーム非依存の言語
- Java Virtual Machine
- Javaは、コンパイル型言語の一種である
- オブジェクト指向型言語
- 手続き型プログラミングとの比較
- 手続き型では分離されていた手続きとデータを「クラス」という概念によって統合し、クラスとクラスを相互に連携させることによって処理を構築するプログラミング技法
- 疑問:オブジェクト指向誕生の背景
- コンパイル型言語
- インタープリタ型言語との比較
- 堅牢性が高い開発
- プログラム実行時の処理性能
- 参考:
- インタープリタ型言語との比較
- 静的型付け言語
- プラットフォーム非依存の言語
JavaとTypeScriptの比較
なぜ僕たちはサーバレスでJavaを諦めTypescriptを採用したか #AWS - Qiita
- 起動オーバーヘッド
- > JVM本体やフレームワークが利用するDI/Webコンテナなどの起動にかかるオーバヘッドが非常に大きい
- > GCやJITコンパイルによってマルチスレッドを活用しても尚素晴らしいランタイムを実現しているがそれでも起動に数秒かかる
- JITコンパイル
- DIコンテナ(Dependency Injection)
DI・DIコンテナ、ちゃんと理解出来てる・・? #PHP - Qiita
- DIとは、「依存性の注入」ではなく「オブジェクトの注入」
- > この機能自体は旧来のいわゆるクラサバモデルでEC2上で動くアプリケーションならほぼ無視できるオーバーヘッドですが、LambdaなどのFaaS上で動くサーバレスアプリケーションでは決して無視できません。
- クラサバモデル
- > GCやJITコンパイルによってマルチスレッドを活用しても尚素晴らしいランタイムを実現しているがそれでも起動に数秒かかる
- > JVM本体やフレームワークが利用するDI/Webコンテナなどの起動にかかるオーバヘッドが非常に大きい
- 気になる単語
Springとは/Spring Bootとの違い
https://codezine.jp/article/detail/11310
0513 メモ
calc(var(--example-name) * 100)
- var()
- 他のプロパティの値に代わって値を挿入できる
- https://developer.mozilla.org/ja/docs/Web/CSS/varの例が使用例
- 関数の最初の引数は、置換されるカスタムプロパティの名前です。関数のオプションの 2 番目の引数は、代替値として機能します。
- カスタムプロパティ:CSS変数
- 接頭辞 -- が付いたプロパティ名、例えば --example-name は、カスタムプロパティを表し、 var() 関数を用いて他の宣言の中で使用することができる値を持ちます。
calc()
- CSS のプロパティ値を指定する際に計算を行うことができる
- muiでのcalc()の使用について
- https://stackoverflow.com/questions/59569174/using-calc-in-mui
- +演算子と-演算子は前後にホワイトスペースが必要
- %表記と長さで計算する必要がある。
0511メモ
HTTPレスポンスのcontent-dispositionからファイル名を取得する
AxiosResponseHeaders['content-disposition']
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Disposition
- マルチパート
- ヘッダ部にあるContent-Typeヘッダの値「multipart/alternative」がマルチパートメール(ボディ部が複数のパートに分けられている)であることを表しています。
- 各パートは「boundary」で指定された文字列で区切られ
- 各パート内のContent-Typeの値によりテキストパート(text/plain)とHTMLパート(text/html)を識別できます
- このような内容のメールを受信したメーラは設定や機能に応じてテキストパートもしくはHTMLパートを選択的に表示します。
- https://sendgrid.kke.co.jp/blog/?p=8262
- MIME メッセージ
- TCP/IPネットワーク上でやり取りする電子メールで、ASCII英数字以外のデータ(各国語の文字、添付ファイルなど)を取り扱うことができるようにする拡張仕様。
- また、画像や音声、動画、コンピュータプログラムの実行ファイル、HTML文書、オフィスソフトの文書ファイルなど、テキスト(文字)以外のバイナリデータを含む様々な形式のデータ
- マルチパートやメールヘッダの形式があり、HTTPにも流用されている
- https://e-words.jp/w/MIME.html
- Content-Disposition:
- attachmentの場合、ダウンロードすべきであることを示します。
- filename
- attachmentと併用すると、「名前を付けて保存」ダイアログの既定のファイル名として使用されます。
- 例:Content-Disposition: attachment; filename="filename.jpg"
- filename*
- 例:filename*=UTF-8''URLエンコーディン
- https://qiita.com/khsk/items/d541b8dc40bd2c6128d2
- filename
- マルチパートの場合は常にform-data
- attachmentの場合、ダウンロードすべきであることを示します。
No.1 Reactアプリをつくる。
事前知識
crate react app でreactアプリの雛形をつくることができる。
上記はfacebookが提供しておりtypescriptでの構築も可能。
調査
create react app(以下CRA)はなにをしてくれている?
参考記事①
create-react-app が裏で何をやっているか理解する - Qiita
npm run ejectを行いファイルを比較している。
npm run ejectってなにいい??
npm run eject
引用
npm run eject で create-react-app はアプリケーションの長寿を保証する - valid,invalid
create-react-app の裏側で react-script を介して使われている諸々のツール・スクリプトをコピーしたり、依存関係を package.json に書き込んだりして、自分で用意したのと同じ状態にするコマンド。実行以降、好きにカスタマイズし放題となる。
これがいつでも出来るのでロックインを回避できる、create-react-app が死んでもアプリケーション側で自前でこれらのツールを制御することが出来る。 つまり、create-react-app はこのツールよりも、アプリケーションの方が長いライフサイクルを持てることを保証するということ。
わかったこと
→ 様々な依存関係をいい感じに設定してくれるもの。ロックインのデメリットもあるが回避可能なコマンドが用意されている。
参考記事②(WebpackやBabelってなに)
Facebook公式のcreate-react-appコマンドを使ってReact.jsアプリを爆速で作成する - Qiita
CRAが出るまで(2016/07/22)と出たあとでの変化
アプリを作る際はWebpackやBabelなどの設定をいじる必要があり、導入障壁が高かったのですが、create-react-appを使えばそれらのステップをすっ飛ばせます。
CRAが出た背景
JSXやES6を使うにはBabelやWebpack、ESLintなどのツールが必要不可欠なので、学習コストが増加した。どのパッケージを入れればいいか悩んだり、依存管理が面倒になる
派生疑問
WebpackやBabelってなに
参考記事
・最新版で学ぶwebpack 5入門 - Babel 7でES2023環境の構築(React, Vue, Three.js, jQueryのサンプル付き) - ICS MEDIA
・ECMAScriptモジュール · JavaScript Primer #jsprimerBabelとは
- トランスパイラ
- 最新のECMAScriptの構文を下位のECMAScriptに変換する。
ECMAScript 2015+ → ECMAScript5 - JSX、アロー関数、テンプレート構文とか
Webpackとは
裏では何が使われている?(公開当時)
- webpack、webpack-dev-server、html-webpack-plugin、style-loader
- Babel (ES6/ES2015)
- Autoprefixer
- ESLint
(公開時点で)入ってないもの
わかったこと
→ JSXやES6からの手法として加わったconstやアロー構文に対応するために、WebpackやBabelがReactでも必要だったが個人で行うには参入難易度が高くなっていた。それらの問題を解決するべきCRAが誕生し、全てをいい感じにしてくれる。
参考記事③(SSG/SSRってなに)
Dan氏によるCreate React Appの将来、およびReactとフレームワークの関係性についてのコメントの翻訳
内容が難しいかつ分量が多いので、断片的にしか読めていません、、、
ただ今後のReact、CRAについて詳しくまとめられているようだったので頑張って全部読もう!(To 自分)
CRAが出る以前
CRAをリリースする以前は自分で一連のツールをインストールして(中略)JSXを使うための正しいプリセットの設定や開発環境と本番環境で異なる設定、アセットのキャッシュのための正しい設定、linterの設定などがありました。
当初のCRAの目的
- 設定なしで新規のReactプロジェクトを始めるための簡単な方法を提供する
- コンパイル関連の依存関係を統合し、簡単にアップデートできるようにする
- Reactチームがツールのアップデートをできるだけ広く展開できるようにする(例えば、Fast RefreshやHooksのlintルール)
CRAの問題
- 代替品より遅い(viteとかのこと?)
- 次世代バンドルツールについて
- Turbopack、Vite
- こちらも回り道がすぎるので調査は略。簡単にwebpackよりめちゃくちゃ早い
- 次世代バンドルツールについて
- 定番のツールをサポートしていない
関連参考記事(引用)
脱 create-react-app! webpackでReact ×TypeScrip開発環境構築からHello World!まで
- 重要な設定部分がブラックボックス化してしまう: 本来しっかりと理解して運用すべきであるバンドルの設定の箇所が見えなくなり、カスタマイズ等がやりづらい
- 不必要なdependenciesが生まれる(バンドルサイズが膨らむ)
- 依存関係の問題で新しい機能(新しいverがサポートされていない)が使えない。
分かったこと
当初の目的以外の様々な問題(動作の軽さ・ツールのサポート)がCRAに生じてきている。ただ、webpackなどの設定に頭を使わずReactを使えう分にはとても優秀である。CRAで困ったら他の候補について調べるくらいで良いのかも、、、ただCRAに生じている問題点を解消するために?それらを中心に?新たな開発ツールが出てきている。
派生疑問
記事に度々出てきていた単語が分からなかったので、、
SSG/SSRってなに
参考記事
Next.jsにおけるSSG(静的サイト生成)とISRについて(自分の)限界まで丁寧に説明する - Qiita
とても丁寧に書かれている記事のため、ほとんどそのまま引用させていただいています。ただ、こちらも量が多く内容が難解なのでかいつまむ程度読みました、、- SSR(Server Side Rendering)、CSR(Client Side Rendering)
- JavaScript の最も素朴な使い方は、HTML ファイルの中でscriptタグの中に JavaScript のコードを記述して、ブラウザ上で JavaScript が動作させること
- (そのため?)React や Vue.js などの JavaScript ライブラリやフレームワークも基本的にはクライアントサイドでのレンダリングを行うのは納得できる話
- CSRの場合、ユーザが使っているデバイスに依存するためJSの容量が膨大になるほどレンダリングの時間が長くなる可能性がある。すなわちサーバーサイドレンダリングを採用すれば、JavaScript を大量にクライアントに送信するという問題は回避できる。
- React でサーバーサイドレンダリングを行えるフレームワークが Next.js
- ただ、SSRであってもオーバーヘッドが発生する。そこで脚光を浴びているのが静的サイト生成(SSG)。
- SSG (Static Site Generation)
- クライアント側で処理を行う CSR も、サーバー側で処理を行う SSR も、ユーザーからのリクエストに応じてその場でレンダリング処理を行うことが速度を下げてしまう主要な原因のひとつだった。
- SSGの発想:あらかじめレンダリングを行なっておいて、ユーザーからのリクエストに対して、すでに構築済みの HTML を返却するだけという形を取れば高速な応答を実現できるはず
- SSG の真の力を引き出すためには、その構築済みの HTML を都度アプリケーション・サーバーから返却するのではなく、CDN に HTML ファイルのキャッシュを配置しておき、各ユーザーに近い CDN からそのキャッシュを返す、という方法を取ることが有効
- CDN(Contents Delivery Network)
- 参考サイト
CDNとは? ~ノンエンジニア向けにわかりやすく解説~ - Jストリーム- インターネットコンテンツを高速配信するために連携する地理的に分散されたサーバー
- CDNは提供されたコンテンツをキャッシュ(コピー)して保持し、コンテンツの閲覧時にサーバーにかかるはずだったアクセス負荷を代わりに受け止めコンテンツを提供する。
- アプリケーションをビルドするタイミングでデータ取得を行う。そのためユーザーからリクエストがあったタイミングでは、データは取得済み。
- CSR(クライアントサイドレンダリング)再考
- 取得したデータをクライアント側でキャッシュするReactライブラリについて
- SWR(stale-while-revalidate)、react-query
- 回り道がすぎるのでこの違いには触れない。
- SSGとCSRの使い分け(簡単に)
- SSR(Server Side Rendering)、CSR(Client Side Rendering)
公式ドキュメントを読む
https://github.com/facebook/create-react-app
CRA以外のreactアプリの構築方法
Babel、webpackを自力で導入する。
参考サイト
- https://enjoyworks.jp/tech-blog/6889
- 最新版で学ぶwebpack 5入門 - Babel 7でES2023環境の構築(React, Vue, Three.js, jQueryのサンプル付き) - ICS MEDIA
- 脱 create-react-app! webpackでReact ×TypeScrip開発環境構築からHello World!まで
webpackからviteなどに移行する。
参考サイト
今回色々調べたたが、
今回学ぶ主題としているのはReactの基礎的な構文や触れて学ぶことなので、CRAで行う。またCRAで作成したプロジェクトをyarn ejectやreact-app-rewiredにより拡張しviteなどに移行できるみたいなので、今後の課題として行いたいと思う。
構築(今回はCRA)
myPCの環境の確認とコマンドの確認
構築
さいごに
No.0 ブログ作成サービスを決める
目次
どんなブログ作成サービスがあるのか
打ち消し線の有無は両サイトに記載のあるかどうか。
参考URL : ブログを作成におすすめなサービスは?選び方とともにご紹介│教えて!レンタルサーバーのこと - ロリポップ!レンタルサーバー
主要7選
- WordPress【本気でブログ運営したい人向け】
- はてなブログ【初期アクセスがほしい人向け】
- ライブドアブログ【データを大量に使う人向け】
- Ameba【ユーザー同士の繋がりを作りたい人向け】
- Blogger【Google運営のブログを使いたい人向け】
Seesaa【1アカウントで複数ブログを作りたい人向け】- note【クリエイター向け】
参考URL : 【どこがいい?】ブログ作成サービスのおすすめ11選!無料で使えるサービスや選び方も紹介 | 初心者のためのブログ始め方講座
主要11選
- WordPress:本格的にブログを運用したい人向け
- はてなブログ:初動からアクセスを期待したい人向け
- Amebaブログ:読者と強いつながりを持ちたい人向け
FC2ブログ:幅広いジャンルでブログを運営したい人向け楽天ブログ:主に楽天アフィリエイトで稼ぎたい人向け- note:クリエイターとしてコンテンツを発信したい人向け
Tumblr:ブログを拡散したい人向け- ライブドアブログ:容量を気にせずに投稿したい人向け
忍者ブログ:アクセス解析や広告運用を試したい人向け- Blogger:無料で強制広告のないブログを運営したい人向け
gooブログ:すぐにブログを立ち上げたい人向け
参考URL : 技術ブログを始めるのにおすすめな無料のブログサービス2つ - applis
技術ブログとしての候補
- はてなブログ
Zenn- note
QiitaMediumdev.to
ブログ作成サービスの違いは何か
こちらも同様の参考URLから: ブログを作成におすすめなサービスは?選び方とともにご紹介│教えて!レンタルサーバーのこと - ロリポップ!レンタルサーバー
参考URL: 【どこがいい?】ブログ作成サービスのおすすめ11選!無料で使えるサービスや選び方も紹介 | 初心者のためのブログ始め方講座
- ブログ作成の目的を明確にする
- デザイン性・カスタマイズ性
- ブログのコミュニティ
- アフィリエイトの可・不可
- 強制広告の有無
他サイトもほとんど同様の内容だったため割愛
以下技術ブログについて
参考URL:
技術ブログを始めるのにおすすめな無料のブログサービス2つ - applis
何を基準に決めるか
ブログ作成の背景を考えた結果
- 手軽に始めることができる
- サーバーの選択や、デザインのカスタマイズをしないで良い
- 月額使用料を取られない
- → WordPressではなく無料サービスに決定
- ただ書くだけ(収益化はまだ考えない)
- ただしマークダウンに慣れたいのでmdに対応していること
- → ライブドアやAbemaは除外
- ただしマークダウンに慣れたいのでmdに対応していること
- 特に書く分野は考えない
- → 情報共有コミュニティ的側面の強いZenn、Qiitaは除外
はてなブログに決定!!!
その他
気になるブログがなんのサービスでできているか調べたいと思った
WordPressで作られたサイトかどうか調べる方法をご紹介 - wagtechblog
で紹介されている
https://www.isitwp.com/にURLを貼り付けると簡単に調べることができた