狠狠撸

狠狠撸Share a Scribd company logo
Reactを用いたスマホアプリケーション開発入門
~Reactの基礎編~
株式会社システムアイ
株式会社システムアイ 3年?4年目チーム
目次
1.導入
1-1.まずはじめに
1-2.本資料の対象読者
2.Reactの基礎
2-1.Reactとは
2-2.Reactの基礎知識 ~仮想DOM~
2-3.Reactの基礎知識 ~JSX~
2-4.Reactの基礎知識 ~コンポーネント~
2-5.React開発環境構築手順
2-6.簡単なサンプルソース(Hello World、時計)
1-1. まずはじめに
本資料は、2018年4月から2019年3月までの1年の期間を使用し、
入社3年目と4年目の社員で「Reactを用いたスマホアプリケーション開発」
をテーマに学習を行い、まとめた資料です。
1-2. 本資料の対象読者
JavaやJavaScript等のプログラム経験は多少あるけど、モバイルのアプリケーションは開発したことない人向け
?開発初心者用の資料となっています。
2-1. Reactとは
Reactとは、Facebookが開発したWebアプリのUIを構築するためのJavaScriptライブラリです。
本資料では、Reactを調べた際に頻出する以下の3項目を中心に説明していきます。
? JSX
? 仮想DOM(Virtual DOM)
? コンポーネント
本章では、仮想DOM(Virtual DOM)について説明します。
まず、DOMとはどういったものなのかを理解してから、仮想DOMについて理解していきましょう。
? DOM操作
? DOMの概要
? 従来のレンダリングと搁别补肠迟を利用したレンダリング
? Reactにおける仮想DOMの利用
? プログラム上のDOM
? 补足
2-2. 仮想DOM
DOMとは、ブラウザでページを見るときに作られるもので、これをもとにレンダリング(描画)が行われます。
HTML文書やXML文書をDOMツリーと呼ばれる階層的な構造として識別します。
DOMツリー
<html>
<head>
<title>タイトル</title>
</head>
<body>
<h1>ヘッダー</h1>
<p>段落</p>
</body>
</html>
HTML文書
DOMでは、全てのHTML要素は
Documentオブジェクトに属しています。
Documentノード
Elementノード
Textノード
Document
<html>
<head> <body>
<title> <h1>
タイトル ヘッダー
<p>
段落
2-2. 仮想DOM - DOMの概要
<p id="sample">SYSTEMI</p>
document.getElementById('sample').style.color = 'blue';
html
javascript
画面
document.getElementById(‘要素ID’)で
Documentオブジェクトに属する要素を取得し、
特定の要素に対して操作を行うことができます。
DOMを取得して、スタイルを変更したり、テキストを書き換えたりするということは、
ノード(要素)にアクセスするということです。これをDOM操作と言います。
2-2. 仮想DOM - DOM操作
従来のレンダリングでは、新しい情報をもとに毎回DOMをいちから作成します。
Reactを利用した場合では、仮想DOMを作成した後、実DOMに反映させます。
従来の表示
Reactを利用した表示
情報
実DOM
実DOM
旧仮想
DOM
新仮想
DOM
情報
差分比較
毎回DOMをいちから作成するため
待ち時間が長くなるという問題点が???
仮想DOMによって時間短縮!(詳細は次ページ)
2-2. 仮想DOM - 従来のレンダリングと搁别补肠迟を利用したレンダリング
Reactでは、ページ表示時に実DOMと対構造となる仮想DOMを定義し、
前回時の仮想DOMと差分比較を行います。そして、実DOMではその差分となった箇所を更新します。
これにより、DOM操作が最小限となり、ページの表示速度を早めることができます。
Document
<html>
<body>
<h1>
ヘッダー1
Document
<html>
<body>
<h1>
ヘッダー1
<h2>
ヘッダー2
差分比較
旧仮想DOM 新仮想DOM
反映 実DOM
差分箇所
2-2. 仮想DOM - Reactにおける仮想DOMの利用
ReactDOM.render(
<div>
<h1>ヘッダー</h1>
</div>,
document.getElementById(‘sample')
);
プログラムでの仮想DOM及び実DOMは、ReactDom.renderを使用する際に出てきます。
本関数を使用することで、仮想DOMの内容を実DOMに反映させます。
<div id=“sample”><div>仮想DOM
sample.js index.html
<ReactDom.renderの使い方>
ReactDom.render(React Element(仮想DOM), 描画先の実DOMの要素ID)
実DOMの要素ID
2-2. 仮想DOM - プログラム上のDOM
Reactの特徴として、仮想DOMを説明しましたが
開発をしていく上では開発者は仮想DOMを意識する必要はあまりありません。
ですが、Reactでは裏でこんなことが行われているということを理解しておきましょう。
2-2. 仮想DOM - 补足
2-3. JSX
本章では、JSX(JavaScript XML)について説明します。
? 記述ルール①
? 概要
? 記述ルール②
? 記述ルール③
? 記述ルール④
? 补足
2-3. JSX - 概要
import React from 'react';
import ReactDOM from 'react-dom';
ReactDOM.render(
<div>Hello!!</div>,
document.getElementById('root')
);
コンパイル前 コンパイル後
JSXとは、ReactでDOMを出力するためにFacebookが開発した独自構文です。
JSXの利用により、JavaScriptコード中にHTMLのようなタグ形式の記述を行うことができます。
import React from 'react';
import ReactDOM from 'react-dom';
ReactDOM.render(
React.createElement(‘div', null, 'Hello!!'),
document.getElementById('root')
);
JSXで記述された箇所は、コンパイラによって最終的にJavaScriptに変換されます。
2-3. JSX - 記述ルール①
import React from 'react';
import ReactDOM from 'react-dom';
ReactDOM.render(
<h1>first text!!</h1>
<h2>second text!!<h2>,
document.getElementById('root')
);
誤った例 正しい例
JSXでは、最上位の階層に複数の要素を並列配置することはできません。
import React from 'react';
import ReactDOM from 'react-dom';
ReactDOM.render(
<div>
<h1>first text!!</h1>
<h2>second text!!<h2>
</div>,
document.getElementById('root')
);
divタグなどで囲むことにより、最上位の階層が単一となり、複数の要素を並列配置することができます。
2-3. JSX - 記述ルール②
ReactDOM.render(
<p class=“sampleText”>Hello</p>,
document.getElementById('root')
);
ReactDOM.render(
<p className=“sampleText”>Hello</p>,
document.getElementById('root')
);
誤った例 正しい例
ReactDOM.render(
<label for="namedInput">Name:</label>
<input id="namedInput" type="text" name="name"/>,
document.getElementById('root')
);
ReactDOM.render(
<label htmlFor="namedInput">Name:</label>
<input id="namedInput" type="text" name="name"/>,
document.getElementById('root')
);
JSXではclass?className
JSXではfor?htmlFor
class属性やfor属性は、JSXでは使用することができません。
(JSXはコンパイル後JavaScriptとなり、classやforはJavaScriptの予約語であるため。)
2-3. JSX - 記述ルール③
import React from 'react';
import ReactDOM from 'react-dom';
ReactDOM.render(
<p style=“color : red”>Hello!!</p>,
document.getElementById('root')
);
style属性は、文字列ではなくオブジェクト記法{{…}}で指定する必要があります。
import React from 'react';
import ReactDOM from 'react-dom';
ReactDOM.render(
<p style={{color : “red”}}>Hello!!</p>,
document.getElementById('root')
);
誤った例 正しい例
2-3. JSX - 記述ルール④
<div>
{ flag && <p>trueの場合</p> }
{ !flag && <p>falseの場合</p> }
</div>
?条件分岐(&&)
JSX内でJavaScriptコードを適用したい場合は、{}内に記述することで可能になります。
?条件分岐(三項演算子)
<div>
{ flag ? <p>trueの場合</p> : <p>falseの場合</p> }
</div>
?繰り返し
<ul>
{ [1,2,3,4,5].map((value) => <li>{value}</li>)}
</ul>
<div>
{(() => {
if (flag) { return <p>trueの場合</p>
} else { return <p>falseの場合</p>}
})()}
</div>
?条件分岐(即時関数)
2-3. JSX - 补足
Reactを利用する上で、JSXは必須ではありません。
タグ形式で記述せず、React.createElemenetと記述しても同じ内容がレンダリングされます。
しかし、要素数が複数であったり、階層が深くなるにつれ、JSXを使用しない書き方は可読性が悪くなるため、
基本的にJSXを使用した方が良いでしょう。
React.createElement(‘ul’, { className: ‘sample’ },
React.createElement(‘li', null, ‘first text!!'),
React.createElement(‘li', null, ‘second text!!'),
)
<ul className=“sample”>
<li>first text!!</li>
<li>second text!!</li>
</ul>
構造が複雑化してくると、JSXを使用した方が感覚的に分かりやすい!
JSX未使用 JSX使用
本章では、コンポーネントについて説明します。
? コンポーネントの定義と呼び出し
? 概要
? コンポーネントの再利用
? データ管理用のオブジェクト(辫谤辞辫蝉と蝉迟补迟别)
? propsの使い方
? stateの使い方
? propsとstateの特徴まとめ
? state更新による再描画
2-4. コンポーネント
Reactにおけるコンポーネントとは、ページを構成するためのUI部品のことです。
親コンポーネント
子コンポーネント
検索
子コンポーネント
画像
検索結果
―――――――――――――――――――――
―――――――――――――――――――――
―――――――――――――――――――――
―――――――――――――――――――――
―――――――――――――――――――――
―――――――――――――――――――――
Reactでは、コンポーネント単位でUI部品を作成し
コンポーネントを組み合わせることでアプリを構築します。
2-4. コンポーネント - 概要
class TestComponent extends Component {
render() {
return (
<div>
<p>段落1</p>
<p>段落2</p>
</div>
);
}
}
class App extends Component {
render() {
return (
<TestComponent />
);
}
}
コンポーネントの中身を定義します。(JSXにて記載)
定義したコンポーネントを呼出します。
コンポーネントからコンポーネントを呼び出すことが可能です。
/sample_source/react/Component1/src/App.js
Componentを継承して、コンポーネントを作成します。
2-4. コンポーネント - コンポーネントの定義と呼び出し
class ChildComponent extends Component {
render() {
return (
<p>子コンポーネント</p>
);
}
}
class App extends Component {
render() {
return (
<div>
<ChildComponent />
<ChildComponent />
</div>
);
}
}
コンポーネントは再利用することが可能です。
コンポーネントを2回呼び出しているので
2回分表示されます。
/sample_source/react/Component2/src/App.js
2-4. コンポーネント - コンポーネントの再利用
props
Component
state
DOM
コンポーネントでは、データを管理するためのオブジェクトとしてpropsとstateを利用することができます。
コンポーネントの内部で保持されるオブジェクト
コンポーネントの外部から
渡されるオブジェクト
2-4. コンポーネント - データ管理用のオブジェクト(辫谤辞辫蝉と蝉迟补迟别)
class TestComponent extends Component {
render() {
return (
<p>
propsの値は「{this.props.propsName}」です。
</p>
);
}
}
class App extends Component {
render() {
return (
<div>
<TestComponent propsName="テスト" />
</div>
);
}
}
this.props.props名で呼出し元から渡された値を取得します。
コンポーネント呼出し時にpropsに値を設定します。
/sample_source/react/Component3/src/App.js
2-4. コンポーネント - propsの使い方
class TestComponent extends Component {
constructor(props) {
super(props);
this.state = {count: 0}
}
add() {
this.setState({ count: this.state.count + 1 });
}
render() {
return (
<div>
<p>state:{this.state.count}</p>
<button onClick={(event) => this.add(event)} >ボタン</button>
</div>
);
}
}
this.setStateでstateの値を更新します。
this.state.countで
stateに設定された値を取得します。
ボタンが押下された場合、
addメソッドを呼出します。
ボタン押下前
ボタン押下後
/sample_source/react/Component4/src/App.js
コンストラクタにてstateの値に0を設定します。
2-4. コンポーネント - stateの使い方
state:0
ボタンthis.state = {count: 0} render()
this.setState() render()
①stateの初期値設定 ②初回描画
④stateの更新 ⑤再描画
続く
③ボタン押下
続き
コンポーネントのstateが更新されることにより再描画が発生します。
state:1
ボタン
stateの更新処理をトリガーに再描画発生
2-4. コンポーネント - state更新による再描画
props及びstateの特徴を以下の表にまとめます。
オブジェクト 値の設定タイミング 値の変更可否
props
コンポーネント呼出し時に設定
(呼出し元の値が設定される)
変更不可
state
コンポーネント作成後に設定
(コンポーネント内部で値を設定する)
変更可能
2-4. コンポーネント - propsとstateの特徴まとめ
本章では、実際にReactを使用して開発を行うための環境構築手順について説明していきます。
? モジュールの導入
? Node.jsの導入
? プロジェクトの作成
? その他
2-5. Reactの開発環境構築手順
2-5. Reactの開発環境構築手順 – Node.jsの導入
●Node.jsとは
?サーバーサイドで動くJavaScript
?「npm」というNode.jsのパッケージを管理するツールがあります。
●特徴
?非同期処理のため、I/Oの処理結果を待たずに処理を進めることができる。
?シングルスレッドのため、メモリ消費が少なく、切替が少ないので処理が高速。
など
●前提
?Windows環境であること。
?JDKが導入済みであること。
2-5. Reactの開発環境構築手順 – Node.jsの導入
以下のサイトよりNode.jsのインストーラを任意のフォルダにダウンロードします。
https://nodejs.org/en/download/
ダウンロード完了後、インストーラを起動し、選択肢はデフォルトのまま、
「Next」ボタンを押下していくことでインストールが完了します。
2-5. Reactの開発環境構築手順 – Node.jsの導入
コマンドプロンプトで下記コマンドを実行し、インストールが成功したかを確認します。
$ node --version
インストールしたバージョンが表示されれば成功です。
コマンドプロンプトにて以下のコマンドを実行し、モジュールのインストールおよび確認を行います。
$ npm install -g create-react-app
$ create-react-app –v
<小ネタ>
●create-react-appについて
facebook社が用意しているreactのプロジェクト作成ツールです。必要なすべてのモジュールが内包されています。
●インストール時の「-g」オプションについて
グローバルインストールすることで、コマンドプロントでコマンド化することが可能となります。
※「-g」 → グローバルインストール
2-5. Reactの開発環境構築手順 – モジュールの導入
コマンドプロンプトにて以下のコマンドを実行し、reactプロジェクトを作成します。
$ cd [任意のディレクトリ]
$ create-react-app [任意のプロジェクト名]
$ cd [任意のプロジェクト名]
$ npm run eject
<小ネタ>
●-npm run ejectの必要性
create-react-appは簡単に環境を構築できますが、デフォルトの設定を簡単にカスタマイズできないようになっています。
create-react-appで作成したプロジェクト「pacage.json」には、create-react-appで必要なモジュールが不足していま
す。そのため、追加でモジュールをインストールした場合、create-react-appで必要なモジュールが消え、buildエラーとなり
ます。
npm run eject を実行するで、create-react-appで使用したライブラリが全て「pacage.json」に追加されます。
2-5. Reactの開発環境構築手順 – プロジェクトの作成
2-5. Reactの開発環境構築手順 – その他
●Reactのプログラムを書くには、プログラミングに特化したテキストエディタを使うことをおすすめします。
以下のテキストエディタがおすすめです。
?Visual Studio Code(https://code.visualstudio.com/Download)
?MicroSoftが開発したオープンソースのプログラミング向けエディターで、無料で使用できます。
?拡張機能(パッケージ)を入れなくても、最初から充実した機能を持っています。
●ブラウザは、開発用機能が使いやすいGoogle Chromeを使用しましょう。
開発ツールにはConsole、Sourceタブなどがあり、JavaScriptのデバッグによく使われます。
2-6. 簡単なサンプルソース
本章では、前章までで学んだ知識を活用して実装できるアプリケーションについて説明していきます。
? Hello World
? 時計
2-6. 簡単なサンプルソース ~Hello World~
「Hello world」と表示させるアプリケーションについて説明していきます。
■完成イメージ
2-6. 簡単なサンプルソース ~Hello World~
●コンポーネントの定義
①コンポーネントを定義
Clsss App extends Component {
render() {
return (
<h1>Hello World</h1>
);
}
}
React.Componentのrender()はComponentの
サブクラスで定義する必要のある唯一のメソッドです。
Componentを1つ返す必要があります。
なお、複数のComponentは返せません。
/sample_source/react/sample_HelloWorld/src/App.js
2-6. 簡単なサンプルソース ~Hello World~
①コンポーネントを定義
ReactDOM.render(<App />, document.getElementById('root'));
ReactDOMのrender()は
React要素を指定されたdocumentの中のDOMに
レンダリングし、そのコンポーネントへの参照を返します。
/sample_source/react/sample_HelloWorld/src/index.js
●コンポーネントの描画
2-6. 簡単なサンプルソース ~Hello World~
●まとめ
?render()はReact.ComponentのとReactDOMの2種類あります。
?React.Componentのrender()はthis.propsとthis.stateを参照した後に、React要素などを返します。
?React.DOMのrender()は実際のDOM要素にレンダリングを行なっています。
2-6. 簡単なサンプルソース ~時計~
現在の日付と時刻を表示するアプリケーションについて説明していきます。
■完成イメージ
2-6. 簡単なサンプルソース ~時計~
●Stateの初期化
現在の時刻を表示するため、this.stateを初期化します。
Constructor(props){
super(props);
this.state = {date: new Date()};
}
コンストラクタにてstateの値を初期化します。
/sample_source/react/sample_watch/src/App.js
2-6. 簡単なサンプルソース ~時計~
●更新間隔の設定
時刻を更新する間隔を設定します。
componentDidMount() {
this.interval = setInterval(
() => this.clock(),
1000
);
}
componentDidMountメソッドはマウント後に実行されるメソッド。
? DOMに初めてレンダリングされるタイミングを「マウント」、
生成されたDOMが削除されるタイミングを「アンマウント」と呼びます。
clockメソッドを1秒間隔で呼び出すように設定します。
/sample_source/react/sample_watch/src/App.js
2-6. 簡単なサンプルソース ~時計~
●時刻の更新
clock = () => {
this.setState({
date: new Date()
});
}
intervalで設定した間隔で呼び出されます。
setState()に現在の時刻を渡し、dateを更新します。
※stateの状態を変える時には
必ずsetStateメソッドを使って変える必要があります。
/sample_source/react/sample_watch/src/App.js
2-6. 簡単なサンプルソース ~時計~
●レンダリング
render() {
return (
<div className="main">
<p>現在の日付</p>
<p>{this.state.date.toLocaleDateString()}.</p>
<p>現在の時刻</p>
<p> {this.state.date.toLocaleTimeString()}.</p>
</div>
);
}
setState()が更新されるたびにrender()が呼び出されます。
this.state.dateが変更されているため、DOMが更新されます。
/sample_source/react/sample_watch/src/App.js
2-6. 簡単なサンプルソース ~時計~
ReactDOM.render(<App />, document.getElementById('root'));
render()メソッドで返された時刻と日付を
ブラウザに表示します。
/sample_source/react/sample_watch/src/index.js
●コンポーネントの描画
2-6. 簡単なサンプルソース ~時計~
●まとめ
1. <App /> がReactDOM.render()に渡されたとき、ReactはAppコンポーネントのコンストラクタを呼びます。
Appは現在の時間を表示する必要があるので、自分の状態this.stateを現在時間を含むオブジェクトで初期
化します。
2. ReactはAppコンポーネントのrender()メソッドを呼びます。これによりReactは画面に表示すべきものを取得
し、render出力に合致するようにDOMを更新します。
3. Appコンポーネントの出力がDOMに挿入されたとき、componentDidMount()メソッドを呼びます。その中で
clock()メソッドを1秒間隔で呼び出すように設定します。
4. 1秒ごとにclock()が呼ばれ、setState()に現在時刻を渡して、this.dateを更新します。setState()を呼び
出すことで、Reactはstateが変わったことに気づき、render()を再度呼びます。
5. render()メソッド内でthis.state.dateが変化しているので、それを反映させるため、DOMが更新されます。

More Related Content

Similar to 厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ) (20)

PDF
谤别补肠迟-蝉肠谤颈辫迟蝉は飞别产辫补肠办で何をしているのか
暁 三宅
?
PDF
Storybook web-and-circleci
Jesse Katsumata
?
PDF
React Native GUIDE
dcubeio
?
PPTX
React componentのコンストラクタを追いかけて
Hoso michi
?
PDF
搁补颈濒蝉で搁别补肠迟.箩蝉を动かしてみた话
yoshioka_cb
?
PPTX
React ContextとPropの違いについて
faliplvsg
?
PPTX
React を導入した フロントエンド開発
daisuke-a-matsui
?
PDF
搁别补肠迟闯厂の开発导入について
Riki Kenmochi
?
PDF
React Hooksでカスタムフックをつくろう
Yoichi Toyota
?
PPTX
研修受讲后情报共有
tsukasamannen
?
PPTX
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
WESEEKWESEEK
?
PPTX
Zealup - React
Masahiro Yanou
?
PPT
骋谤辞辞惫测コンファレンス
Shinichiro Takezaki
?
PPTX
Using the Fragments(Android)
Teruaki Kinoshita
?
PPTX
20160927 reactmeetup
Naoki Kurosawa
?
PDF
痴耻别.箩蝉スロットの近代史
fuku68
?
PDF
[Okta x Jamf合同新年会] Okta Workflowsによるノーコート?業務改善 ?Jamf APIを使ってMac端末情報を自動収集してみよう?
Ryo Sasaki
?
PPTX
Com camp2014
彰 村地
?
PPTX
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界
オラクルエンジニア通信
?
PDF
180320 Shibuya.apk - Android architecture pattern
Tsuyoshi Yoshioka
?
谤别补肠迟-蝉肠谤颈辫迟蝉は飞别产辫补肠办で何をしているのか
暁 三宅
?
Storybook web-and-circleci
Jesse Katsumata
?
React Native GUIDE
dcubeio
?
React componentのコンストラクタを追いかけて
Hoso michi
?
搁补颈濒蝉で搁别补肠迟.箩蝉を动かしてみた话
yoshioka_cb
?
React ContextとPropの違いについて
faliplvsg
?
React を導入した フロントエンド開発
daisuke-a-matsui
?
搁别补肠迟闯厂の开発导入について
Riki Kenmochi
?
React Hooksでカスタムフックをつくろう
Yoichi Toyota
?
研修受讲后情报共有
tsukasamannen
?
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
WESEEKWESEEK
?
Zealup - React
Masahiro Yanou
?
骋谤辞辞惫测コンファレンス
Shinichiro Takezaki
?
Using the Fragments(Android)
Teruaki Kinoshita
?
20160927 reactmeetup
Naoki Kurosawa
?
痴耻别.箩蝉スロットの近代史
fuku68
?
[Okta x Jamf合同新年会] Okta Workflowsによるノーコート?業務改善 ?Jamf APIを使ってMac端末情報を自動収集してみよう?
Ryo Sasaki
?
Com camp2014
彰 村地
?
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界
オラクルエンジニア通信
?
180320 Shibuya.apk - Android architecture pattern
Tsuyoshi Yoshioka
?

Recently uploaded (6)

PDF
音学シンポジウム2025 招待讲演 远隔会话音声认识のための音声强调フロントエント?:概要と我々の取り组み
Tsubasa Ochiai
?
PDF
フィシ?カル础滨时代のセキュリティ:ロホ?ティクスと础滨セキュリティの融合のあり方
Osaka University
?
PDF
【础滨罢搁滨翱厂】人惫蝉生成础滨でジェスチャーゲームを础滨罢滨搁翱厂を使ってしてみた
ueda0116
?
PDF
React Native vs React Lynx (React Native Meetup #22)
Taiju Muto
?
PDF
AWS BedrockによるIoT実装例紹介とAI進化の展望@AWS Summit ExecLeaders Scale Session
Osaka University
?
PPTX
[Liberaware] Engineer Summer Internship.pptx
koyamakohei
?
音学シンポジウム2025 招待讲演 远隔会话音声认识のための音声强调フロントエント?:概要と我々の取り组み
Tsubasa Ochiai
?
フィシ?カル础滨时代のセキュリティ:ロホ?ティクスと础滨セキュリティの融合のあり方
Osaka University
?
【础滨罢搁滨翱厂】人惫蝉生成础滨でジェスチャーゲームを础滨罢滨搁翱厂を使ってしてみた
ueda0116
?
React Native vs React Lynx (React Native Meetup #22)
Taiju Muto
?
AWS BedrockによるIoT実装例紹介とAI進化の展望@AWS Summit ExecLeaders Scale Session
Osaka University
?
[Liberaware] Engineer Summer Internship.pptx
koyamakohei
?
Ad

厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)