8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Figma×Amplify×Reactのローコードツールを0から検証してみたらフロントの難易度がさらに上がったと感じた話

Posted at

Figma × Amplify × React の激震

昨年末に開催されたAWS主催のre:Inventでモバイル、WEBアプリケーション開発を行える、ローコードツール Amplify Studio の発表がされました。
この発表に対して「フロントエンドエンジニアはもういらない」「これなら俺でもフロントエンドができそう」など冗談混じりの会話が知人との中でなされていて、自分はフロントエンジニアとしての不安感と、サービス開発者としての期待感をいただいております。

スクリーンショット 2022-01-02 21.41.06.png

ただ正直、これからフロントエンジニアにどういう影響を与えるか不安なので、色んな記事を調べさせていただいたのですが、ほとんど出来合いのデザインを活用したチュートリアルを試してみたものが多く、0からデザインして運用し開発へどう活用するか?の疑問が解決できなかったので自分で試してみて、フロントエンジニアという職種、強いてはエンジニア全体にどのような影響を与えるのか調べていきたいなと思っています。

ハンズオン形式となっているので実際に試してみたい方は次の章から、実際に触ってみた感想だけ知りたい方は一番最後まで読み飛ばしてください。

React のブロジェクトを作成

まずこれを利用するにあたってReactのプロジェクトを作成する必要があります。
下記コマンドを打って。


HiguchiShuya@MacBook-Shuya v % npx create-react-app memory-talk 

こんな感じでプロジェクトの作成に成功します。

スクリーンショット 2022-01-01 23.12.13.png

画像のように Happy hacking! が表示されたら成功です。

無事プロジェクトの作成に成功したらgithubにpushしましょう。
後ほどAmplifyで連携するために利用します。

スクリーンショット 2022-01-02 14.12.40.png

Figmaでプロジェクトを作成する

Figmaでプロジェクトを作成する際は Figma公式 からアクセスし、すでにアカウントがある場合は New design file からシートを作成します。

スクリーンショット 2022-01-02 11.03.17.png

新しくシートが作成されたら上の Untitled のところをクリックしてプロジェクトに名前をつけましょう。

スクリーンショット 2022-01-02 11.41.31.png

Figmaでお絵かき開始

今回はスマホをメインに作成してこうと思うのですが、まずベースとなる台紙を用意します。

まずは 左上にある漢字の井みたいなところを押して画面上にある適当なところに四角形を作成します。

スクリーンショット 2022-01-02 11.41.59.png

作成したら下図に示すFrameのところをクリックすると

スクリーンショット 2022-01-02 11.42.30.png

好きなスマホサイズを選べます。

スクリーンショット 2022-01-02 11.42.30.png

これで Figmaの画面を作成する下地ができました。

こんな感じで画面を作成していきFrameの中にFrameを配置することで画面を作っていくことができます。
色はFillのところのタブを開くと表示されるのでそこで色を変更することができます。

スクリーンショット 2022-01-02 11.47.48.png

ちなみにUIのコンポーネントをただおくだけであれば簡単にズレてしまうので、それが不安な方は是非 Auto Layout 機能を使いましょう!

そしていい感じにスマホ画面のUIの土台となる部分を作成しましょう。
Figmaのデザインに凝りすぎてしまうといつまで経っても進まないのでほどほどのところで次のステップに進みます。

スクリーンショット 2022-01-02 14.09.19.png

Amplify のアプリケーションを作成する

AWSコンソールにサインインしてAmplifyの画面を開きます。
右上の新しいアプリケーションからウェブアプリケーションをホストを選択しましょう。

スクリーンショット 2022-01-02 14.06.16.png

そしてgithubを選択して続行

スクリーンショット 2022-01-02 14.07.10.png

最初に作成したリポジトリとブランチを選択します。

スクリーンショット 2022-01-02 14.07.19.png

すると無事アプリケーションの作成が開始され時期に下図のような画面がでます。

スクリーンショット 2022-01-02 14.15.20.png

そしてタブで「Backend environments」に切り替えて「Get started」を押します。

スクリーンショット 2022-01-02 14.30.57.png

ちなみにこれをしないとAmplify Studioに遷移したとき下図のような An error occurred while fetching the app backend: NotFoundException - An error occurred while processing your request: BackendEnvironment staging does not exist. というエラーが表示されてしまします。

スクリーンショット 2022-01-02 14.31.04.png

Amplify と Figma の連携

左のタブに表示されている アプリの設定ー>Amplify Studio の設定 を押して下図のような画面へ遷移して 「Amplify Studio を有効にします。」 を on にしてください。

スクリーンショット 2022-01-02 14.17.55.png

ユーザーの招待を押して自分のメールアドレスを入力します。
権限はバックエンドもいじりたいのでとりあえずフルアクセスにしてます。

スクリーンショット 2022-01-02 14.21.18.png

そうするとメールアドレスに招待メールが届き、一時的なパスワードが記載されているのでそれをコピーして「Visit the Amplify Studio」をクリック。

スクリーンショット 2022-01-02 14.23.08.png

メアドと一時バスワードを入力すると新しいパスワードが要求されるので、大文字と記号を含んだパスワードを新しいパスワードとして設定すると Amplify Studio にログインできます。

スクリーンショット 2022-01-02 14.27.11.png

Amplify Studio に入れましたね

スクリーンショット 2022-01-02 14.34.06.png

そしていよいよFimgaとの連携

Figmaの Share -> copy link を押してFigmaの閲覧用のURLを取ってきて

スクリーンショット 2022-01-02 14.36.25.png

Amplify Studio の UI Library (preview) の Get started を押して

スクリーンショット 2022-01-02 14.35.51.png

出てきたポップアップに先ほどコピーしたFimgaのリンクを貼ります。
そして Continue を押します。

スクリーンショット 2022-01-02 14.36.49.png

これで連携されるはずですが、、、うまくいきませんでした。

スクリーンショット 2022-01-02 14.45.32.png


Cannot find components
We couldn't find any components in the following file:

とエラー文が表示されているのでおそらくFigma上でコンポーネント化していないものに関しては連携されないようです。
気を取り直してコンポーネント化してFimgaとの連携を楽しんでいきましょう。

Figma でコンポーネントを作成して Amplify Studio から扱えるようにする。

Figmaでコンポーネントにできそうな親のフレームを選択して右クリックすると Create Component を選択するとその部分をコンポーネントにできます。

スクリーンショット 2022-01-02 14.51.21.png

そして再度連携すると下図のようにコンポーネントが表示されます。
Accept もしくは Accept All を押してコンポーネントを Amplify Studio に読み込ませましょう。

スクリーンショット 2022-01-02 14.54.19.png

またここは自分でも誤解していたところになりますが、 Figmaで書いたものが何でもかんでもReactのコードとして吐き出せるわけではなくあくまでFigma上でコンポーネント化したもののみがAmplify Studio で扱ってコードとして吐き出すことができる模様です。

Amplify で生成したコンポーネントをローカル環境へインストール

作成したコンポーネントをローカルの開発環境で使うためには Amplify CLI の準備などが必要で こちらの記事 がわかりやすいので参考にして環境の準備の方をしてください。

先ほどのAmplify Studio の画面で Configure を押して

スクリーンショット 2022-01-02 14.54.35.png

Get component Code を押すとインストールの仕方が表示されます。

スクリーンショット 2022-01-02 15.36.34.png

元々必要なライブラリがローカル環境に入っているか否かで設定が変わりますが自分の場合は以下の手順で設定を進めました。

amplify で生成されたコンポーネントをインストール


amplify pull --appId [個々人で違うappId] --envName staging

するとブラウザが起動してボタンを押すと以下のような画面になるので再度CLIに戻る

スクリーンショット 2022-01-02 15.38.12.png

CLIから設定に関する質問がくるのでそれを以下のように設定

スクリーンショット 2022-01-02 15.39.12.png

そして足りないライブラリを追加すると準備完了


npm install aws-amplify @aws-amplify/ui-react

画像のように ui-components というフォルダができてその中に Figma から作成したコンポーネントが表示されます。

スクリーンショット 2022-01-02 15.46.49.png

ちなみに吐き出されたコードはこんな感じ。Figmaでちゃんと Auto Layout を使っていたおかげかちゃんと生成されたコードに Flexbox が使われいる。Figmaでのコンポーネント作成をちゃんと頑張ればいい感じに使えそう。

CardHomeTalk.jsx
/***************************************************************************
 * The contents of this file were generated with Amplify Studio.           *
 * Please refrain from making any modifications to this file.              *
 * Any changes to this file will be overwritten when running amplify pull. *
 **************************************************************************/

/* eslint-disable */
import React from "react";
import { getOverrideProps } from "@aws-amplify/ui-react/internal";
import { Flex, Text, View } from "@aws-amplify/ui-react";
export default function CardHomeTalk(props) {
  const { overrides: overridesProp, ...rest } = props;
  const overrides = { ...overridesProp };
  return (
    <Flex
      border="1px SOLID rgba(0,0,0,1)"
      padding="0px 23px 0px 23px"
      backgroundColor="rgba(255,255,255,1)"
      overflow="hidden"
      alignItems="flex-start"
      borderRadius="8px"
      gap="20px"
      width="289px"
      position="relative"
      direction="row"
      {...rest}
      {...getOverrideProps(overrides, "Flex")}
    >
      <View
        padding="0px 0px 0px 0px"
        backgroundColor="rgba(255,255,255,1)"
        overflow="hidden"
        shrink="0"
        width="60px"
        position="relative"
        height="100px"
        {...getOverrideProps(overrides, "Flex.View[0]")}
      >
        <View
          padding="0px 0px 0px 0px"
          backgroundColor="rgba(196.00000351667404,196.00000351667404,196.00000351667404,1)"
          top="16px"
          borderRadius="8px"
          left="0px"
          width="60px"
          position="absolute"
          height="60px"
          {...getOverrideProps(overrides, "Flex.View[0].View[0]")}
        ></View>
      </View>
      <View
        padding="0px 0px 0px 0px"
        backgroundColor="rgba(255,255,255,1)"
        overflow="hidden"
        shrink="0"
        width="185px"
        position="relative"
        height="100px"
        {...getOverrideProps(overrides, "Flex.View[1]")}
      >
        <Flex
          padding="16px 0px 0px 8px"
          alignItems="center"
          top="0px"
          left="0px"
          gap="10px"
          width="195px"
          position="absolute"
          direction="row"
          {...getOverrideProps(overrides, "Flex.View[1].Flex[0]")}
        >
          <Text
            padding="0px 0px 0px 0px"
            color="rgba(0,0,0,1)"
            textAlign="left"
            shrink="0"
            display="flex"
            justifyContent="flex-start"
            fontFamily="Roboto"
            fontSize="18px"
            lineHeight="21.09375px"
            position="relative"
            fontWeight="700"
            direction="column"
            children="Title"
            {...getOverrideProps(overrides, "Flex.View[1].Flex[0].Text[0]")}
          ></Text>
        </Flex>
        <Flex
          padding="0px 0px 0px 8px"
          alignItems="flex-start"
          top="42px"
          left="0px"
          gap="8px"
          width="195px"
          position="absolute"
          direction="row"
          height="58px"
          {...getOverrideProps(overrides, "Flex.View[1].Flex[1]")}
        >
          <Text
            padding="0px 0px 0px 0px"
            color="rgba(0,0,0,1)"
            textAlign="left"
            shrink="0"
            display="flex"
            justifyContent="flex-start"
            fontFamily="Roboto"
            fontSize="12px"
            lineHeight="14.0625px"
            position="relative"
            fontWeight="400"
            direction="column"
            children="text"
            {...getOverrideProps(overrides, "Flex.View[1].Flex[1].Text[0]")}
          ></Text>
        </Flex>
      </View>
    </Flex>
  );
}


生成されたコンポーネントをReactで扱う

まず React で Amplify で生成されたコンポネントを扱うための準備をおこないます。
src/index.js で必要なライブラリのインポートを行い <App /> <AmplifyProvider> </AmplifyProvider>で囲みます。

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

// 追加
import Amplify from 'aws-amplify';
import "@aws-amplify/ui-react/styles.css";
import {AmplifyProvider} from "@aws-amplify/ui-react";
import awsconfig from './aws-exports';
Amplify.configure(awsconfig);
// ここまで

ReactDOM.render(
  <React.StrictMode>
    <AmplifyProvider>
      <App />
    </AmplifyProvider>
  </React.StrictMode>,
  document.getElementById('root')
);


そして import { CardHomeTalk } from './ui-components'; を追加して余計なタグを削除した上で <CardHomeTalk />div 配下において書き換えます。

App.js

import logo from './logo.svg';

import './App.css';

// 追加
import { CardHomeTalk } from './ui-components';

function App() {
  return (
    <div className="App">
      <CardHomeTalk />
    </div>
  );
}

export default App;

するとこう表示されていたものが、、

スクリーンショット 2022-01-02 15.54.04.png

こうなりちゃんとFigmaで作成したコンポーネントが表示されたことがわかります。

スクリーンショット 2022-01-02 15.54.45.png

感想

結論、フロントエンジニアの難易度はさらに上がると思います。
1人のフロントエンドエンジニアとしては業界を変えるほどの大きなブレークスルーにはならないと感じております。
理由としては、なんだかんだでやりにくいというのが正直な感想だからです。
ローコードなので完全にコードを理解しないで作れるわけではないので、一部でコードを書く必要が出てきます。
そうなった時に、状態管理、アーキテクチャの選定、コンポーネント管理など多くのエンジニアが頭を悩ます問題に直面し、その上に Amplify Studio から生成されたコードとの兼ね合いも調整する必要があります。
つまり、フロントのコードとしては難易度は上がります。
なのでこの Amplify Studio をプロダクトレベルで用いるためには フロントエンジニアとしてより高いスキルが求められるようになる でしょう。

ただ、うまく扱えるとかなりの武器になると思います。
例えばフロントでは「Figmaと実際に作られたプロダクトのデザインが違う」なんてことがざらにあります。
また、Figmaのデザインがフロントからしたら構築しにくいこともあります。
そういった仕様把握の問題解決や、実装の工数を削減してくれるという点では期待が持てます。

ノーコード、ローコードの期待感は高まる一方で色んな理想が語られることはありますが、現実では問題点が多く
それを活用するのにエンジニアとして知恵を絞る必要があると感じています。

最後に、
自分はこれからこの AWS Amplify Studio を使って個人のサービス開発を行なっていく予定です。
間違いや至らぬ点などあるかもしれませんが、新しい発見とかを時間を見つけて発信していくのでよかったらフォローなどをして応援してもらえると嬉しいです。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?