カテゴリー: プログラミング

  • プログラミングスキルアップ|Next.jsを学ぶ#03

    プログラミングスキルアップ|Next.jsを学ぶ#03

    Youtube動画を見ながらNext.jsの学習を進めようの記事、第三弾となります。

    1回目の記事はこちら

    2回目の記事はこちら

    今回の対象ファイル

    今回の3回目ではログインページのフォーム追加であったり、サインアップ・ログインボタンの実装をしていってます。

    主に編集を加えていってるのは以下のファイル

    src/app/page.tsx
    src/components/forms/PatientForm.tsx
    src/components/CustomFormField.tsx
    src/components/SubmitButton.tsx

    これに新しく、validation.tsを作成しています。

    src/lib/validation.ts

    コンポーネント部分の調整と、フォーム入力の際のバリデーションに関する実装、という感じですね。

    フックの利用

    PatientForm.tsxの編集では、フックと呼ばれるものが出てきました。

    いまいち理解していなかったので、例のごとくChatGPTに質問。

    useStateは状態管理に関するもので、useRouterはルーティング機能に関するものなんですね。

    現在の情報、状態の更新、状態の初期値を指定することで、レンダリングするたびに更新されるというのがuseStateだと。

    そしてuseRouterは

    useRouter は Next.js のフックで、ページのルーティング(URL の遷移やクエリパラメータの取得など)に関する情報やメソッドにアクセスするために使用されます。Next.js はページベースのルーティングシステムを提供しており、useRouter はこのシステムと連携するための強力なツールです。

    と書かれていますので、オブジェクトを作った上で以下メソッドを利用してページ遷移の実装をしているんですね。

    この辺はWordPress(PHP)での扱いに近いなぁと思いながらコーディングを進めていきます。

    フォームフィールドに関するコンポーネントの編集

    フォーム入力部分については、テキスト形式(名前など)なのか、数字形式(電話番号)なのかの条件分けが必要になるので、今回はswitch文を利用して作成していきます。

    const RenderField = ({field, props}: {field: any; props:CustomProps}) => {
      const {fieldType, iconSrc, iconAlt, placeholder} = props;
    
      switch (fieldType){
        case FormFieldType.INPUT:
          return(
            <div className="flex rounded-md border border-dark-500 bg-dark-400">
              {iconSrc && (
                <Image
                  src = {iconSrc}
                  height = {24}
                  width= {24}
                  alt = {iconAlt || "icon"}
                  className = "ml-2"
                />
              )}
              <FormControl>
                <Input 
                  placeholder={placeholder}
                  {...field}
                  className="shad-input border-0"
                />
              </FormControl>
            </div>
          )
        case FormFieldType.PHONE_INPUT:
          return(
            <FormControl>
              <PhoneInput 
                defaultCountry="JP"
                placeholder = {placeholder}
                international
                withCountryCallingCode
                value = {field.value as E164Number | undefined}
                onChange={field.onChange}
                className="input-phone"
              />
            </FormControl>
          )
        default:
          break;
      }
    }

    ここで太字にしているPhoneInputというのがnpmでインストールする必要がありました。

    React-phone-number-inputというものが用意されているようで、これをnpmで実行すれば使えるようになりました。

    属性値には国名を入れることになりますが、日本の場合は『JP』と入力すればOK。

    これを入れることで、入力フォームによくある国旗と+●●みたいなのが出てくるようになりました。

    実際のフォームフィールドについて項目を追加

    今回は、氏名・メールアドレス・電話番号が必要になるフォームの実装でしたので、コードはこんな感じになっています。

    <Form {...form}>
        <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6 flex-1">
          <section className="mb-12 space-y-4">
            <h1 className=" header ">Hi there ✊</h1>
            <p className="text-dark-700">schedule your first appointment.</p>
          </section>
    
          <CustomFormField 
            fieldType = {FormFieldType.INPUT}
            control = {form.control}
            name="name"
            label="Full name"
            placeholder = "サンプル太郎"
            iconSrc = "/assets/icons/user.svg"
            iconAlt = "user"
          />
    
          <CustomFormField 
            fieldType = {FormFieldType.INPUT}
            control = {form.control}
            name="email"
            label="Email"
            placeholder = "sampletaro@test.com"
            iconSrc = "/assets/icons/email.svg"
            iconAlt = "email"
          />
          
          <CustomFormField 
            fieldType = {FormFieldType.PHONE_INPUT}
            control = {form.control}
            name="phone"
            label="Phone number"
            placeholder = "01234567890"
            iconSrc = "/assets/icons/phone.svg"
            iconAlt = "phone"
          />

    このCustomFormFieldひとつひとつが入力欄になっているわけですね。

    そしてSubmitボタンを作成していくことになります。

    Validationの実装

    バリデーションはzodを利用して簡潔に書いていきます。

    これ、すごく便利ですね。フォームのバリデーションって結構めんどいイメージでしたけど、zod利用するとかなり簡潔に記載することができました。

    export const UserFormValidation = z.object({
      username: z.string()
      .min(2, "ユーザー名は2文字以上入力してください")
      .max(50, "ユーザー名は50文字以内で入力してください"),
      email: z.string().email("無効なアドレスです"),
      phone: z.string().refine((phone) => /^\+\d{1,14}$/.test(phone), "無効な電話番号です")
    })

    動画ではエラーメッセージも英語で書いてますが、ここは自分の学習目的なので日本語で置き換えてます。

    まとめ

    こんな感じで、やっとこ動画の進捗が1時間を超えてきました(実際は5時間以上ある)

    今のところはこんな感じ。左側のフォームが増えているのがわかります。

    さぁ引き続き頑張っていきます!

  • AIで作る【Web制作学習者向けのタイピングゲーム】

    AIで作る【Web制作学習者向けのタイピングゲーム】

    生成AIはほんといろんなものが次々にでてきますね。
    有名どころではChatGPTだったりGemini・Birdなんかがあるかと思いますが、用途によって生成AIの能力も変わってきているのが面白いところです。

    音声生成だと〜〜

    画像生成だと〜〜

    みたいな感じで、それぞれに得意・不得意があっていいですよね。

    そんな中で、プログラミングに強い生成AI Claude3.5 を利用してタイピングゲームを作ってみたのでシェアします。
    といっても他にも生成AIを使っているので、やり方を公開という感じですね。

    早速いってみましょう!

    どんなものを作るのか、ざっくりと決める

    まずは、自分の頭の中を整理します。どんなものが作りたいのか、何で作りたいのかということを言語化していきます。

    この時点で私は『タイピングゲームを作りたい』ということが浮かんでいました。

    副業しよう、何かパソコン使ってできる仕事をしよう、Web制作をしよう、プログラミングしよう、と考えた時にどうしても必要になるのがタイピング技術になります。

    そして、通常の単語ではいっぱい遊びながら学べる寿司打をはじめ、たくさんのタイピングゲームが出ています。

    でもWeb制作者向けに特化したようなタイピングゲームってないよね?って思ったのがきっかけです。

    コードをたくさん打つので、日本語よりもむしろ英語の方が打つ機会が増えてくるため、ちょっと違ったスキルだよなぁというのを感じていました。

    そんな感じで『Web制作者が日常で扱う単語を集めたタイピングゲームを作りたい』ということになりました。

    chatGPTとのやりとり

    作りたいものを決めたら、それを生成するための『プロンプト(命令文)』を考えます。ただ、それもAIでできちゃうから面白いですよね。

    今回は見出しの通り、chatGPTを利用してプロンプトを作ってもらいました。

    こんな感じで、自分が考えた状況を羅列するような形でプロンプトつくってねーとチャットを投げています。
    そうするとこんな感じでポイントを伝えながら必要なプロンプトを生成してくれましたので、Claudeに投げていきます。

    Claude3.5とのやりとり

    Claude3.5はプログラミング関連の作品作りに強いと言われている生成AIになります。もしかしたらChatGPTでもいいのかもしれないけど、ものはためしってことでやってみました。

    といってもChatGPTから送られてきたプロンプトをそのままコピペして貼り付けるだけ。

    そうすると、すぐにコードを作ってくれます。

    ただ、ここで問題が。

    ClaudeはHTML・CSS・Javascriptを使ってコードを生成してくれているのですが、公開のことを全く考えていなかったんですよね。

    本来なら自分でサーバー契約して、ドメインを用意して、そこにファイルを入れて…ってやるのが一般的なのかもしれないですが、僕はちょっと手法を変えてやってみることにしました。

    つまり、シンプルなHTMLだけではなく、モダンな技術も取り入れて公開までやってみようということです。

    そう決まれば、HTMLじゃなくて別の方法で生成しなおしてねーとかやりとりを続けていくことになります。

    またすぐにコードを生成してくれるわけですが、次の問題が発生。

    それは、無料枠でのやり取り上限に達してしまったこと。ただ、これは時間が経てば改めて質問できるということだったので、時間をおいて再チャレンジ。

    できてきたもののチェックと修正

    やり取りの制限がリセットされたので、再開していろいろと聞いていきます。

    コピペするだけだとエラーが出たり、思った挙動にならなかったりするので、その辺を言語化したりエラー文章をまるっとコピペして渡します。

    この時に、『エラーの原因を教えて』など入れておくと、どうしてこういったエラーになったのか、自分の学習もかねてやり取りすることができます。

    そうして数回のやり取りで何となく形になってきたので、ありがとうという気持ちを伝えておきました。

    実際にできたもの

    https://sushidalike.vercel.app/

    実際にできたのはこんな感じ。シンプルですがスコアも出るようになってます(なってるはず)

    タイトル:Web制作学習者向けタイピングゲーム『Webタイピング道場』

    技術スタック:Next.js・TailwindCSS・Typecsript・HTML

    やってみた感想としては、めっちゃ楽しい!でした。自分の頭の中がクリアになっていく感じだったり、スピード早く作品ができていくことが感動でした。

    AIに仕事を取られるかどうか、というのはまだはっきりしないけど、AIを使いこなせないと仕事ができなくなっていくんだろうなということは実感した出来事でした。

  • プログラミングスキルアップ|Next.jsを学ぶ#01

    プログラミングスキルアップ|Next.jsを学ぶ#01

    プログラミング言語はいろいろあって、その中でも流行り廃りがありますが、フロントエンドエンジニアとしての最近のトレンドの一つに、Next.jsがありますね。

    Next.js(ねくすとじぇいえす)はJavascriptのフレームワークの一つで、ReactやTypescriptを利用して構築していきます。
    おしゃれなサイトができやすい、最近流行りの他のライブラリやツールとも互換性があるのも魅力でしょう。

    プログラミングを学びはじめると、HTML・CSSからいってみよー!というのがどのサイトや本でも書かれているのですが
    なかなかその2つだけだと効率的にお仕事に結びつきません。

    そうすると新しいスキルを身につけようという動きになって、JavascriptやPHPといった言語を扱い、WordPressでホームページ制作ができるようになっていくというのがメジャーなロードマップになります。

    そのJavascriptもいろんなライブラリ・フレームワークがあるわけですが、最近はもっぱらTypescriptを利用しつつReactを使ってNext.jsでサイトを構築していくのが主流でしょう。むしろこれら使わないとフロントエンドエンジニアとしての未来が閉ざされるんじゃ無いかってくらいです。

    じゃあどうやって学んでいくかという話になりますが、書籍・学習サイトとありますが私がお勧めするのはYoutubeです。それも英語のチャンネルがおすすめ。一連の動きをまとめた動画で、数時間に及ぶものがゴロゴロ公開されていますので、それを見ながら手を動かしていくのがスキル定着にはもってこいです。

    まずは手を動かしつつ、何をやっているのかわからない部分があればChatGPTなどに聞いてみるのが効率の良い勉強になるでしょう。

    というわけで、私も動画を見つつサイトを構築していってます。

    参考にしている動画はこちら。

    そしてつくっているコードはこちらです(随時更新予定)

    https://github.com/takumakoike/nextjs-careplus/tree/main/careplus

    ここではどんなことを学んだのか、アウトプットとして記事を用意していこうと思います。
    まずは第一弾としてやったことを。

    環境設定

    ターミナルを開いて、新規にnext.jsのappを作成します。

    npx create-next-app@latest アプリ名

    この後に出てくる設定はすべてデフォルトのまま進めています。

    必要なもののインストール

    今回はTailwindcssやTypescriptは最初から入れてましたのでそんな必要となるものはなかったですが、UI構築のためにShadcnというのを利用しています

    npx shadcn-ui@latest init

    そしてTailwindのアニメーションも追加しているので

    npm install tailwindcss-animate

    あとはダークモードの設定やらで

    npm install next-themes

    といった感じでインストールをしています。現時点では。

    それぞれの公式サイトはこちら。

    Tailwindcss

    Shadcn/ui

    こうみると、『必要なものをインストール』と『インストールしたものを利用してコーディング』を行き来している感じがあります。

    page.tsxの作成

    トップページ、今回はログインをするようなページになるのですが、これを作成していきます。

    詳しいコードはGithubを参考にという感じですが、やっていることは、Formのコンポーネントを用意して表示することと、簡単なレイアウトとしてロゴ画像だったり画面右側に画像を表示させることをやっています。

    componentsの作成

    コンポーネントはFormコンポーネントを用意しています。
    現時点ではUsernameを入れられるフォームを作り、それが規定文字数以下だったらエラーになるように作ってます。

    いやー、これを一からフォームタグ使って実装しようとすると既に辛い未来が見えるので、こういった時にライブラリをすっと利用できるっていうのは本当にありがたいですね。

    現状

    現時点ではレスポンシブ対応がまだなので、画像もずれるし、実際のログイン認証なんかも実装はできてない状態。

    英語の動画ってどうなの?

    英語版の動画を見ていて、本当に理解しているの?と質問が来そうですが、言葉を全て理解しているわけではありません。
    大事なのは、画面で何をしているのかがわかることであったり、推測しながら手を動かすことです。

    確かに日本の動画の方がわかりやすいですが、海外の動画の方がおしゃれなサイトを作る動画が多かったりして作っていく楽しみは大きいんですよね。

    意外と言葉がわからなくても何とかなるもんだと、HTMLの学習時代から感じているので、日本の動画で参考にするものが見つからない方はチャレンジしてみることがおすすめです!

    そんな感じで引き続き頑張っていきたいたいと思います。

    Instagramではプログラミング初学者向けに情報発信をしています。気軽にフォロー・コメント待ってます🎵

    https://www.instagram.com/takuma.internet.skill/?hl=ja
  • 挫折させないプログラミングロードマップ2024

    挫折させないプログラミングロードマップ2024

    プログラミングの独学は、挫折率が90%以上とも言われています。私自身も、今でこそ脱サラして自由な働き方をしていますが、病院に勤めながら独学していた時には何度も挫折を経験しました。

    多くの人がプログラミングを学び始めますが、途中で挫折してしまう原因はいくつかあります。

    この記事では、私の経験と、PCスクール講師としての知見を基に、挫折しやすい人の傾向を分析し、プログラミング学習で成功するための具体的なロードマップを提供します。時代の変化が激しい今だからこそ、この記事を読んで少しでも挫折しにくい状況で学習を進めてください。

    この記事を読んでわかること

    • 盲点?挫折しやすい原因
    • 挫折しないプログラミング学習の考え方
    • 挫折しない具体的なロードマップ

    それでは、いってみましょう!


    1. 挫折しやすい原因:なぜプログラミング学習で挫折するのか?

    1.1 初期の壁:タイピングのスキル不足

    プログラミングを始めたばかりの人が直面する最大の障壁は、実はタイピングスキルの不足です。コードを書くためにはキーボードでの入力が不可欠ですが、タイピングに時間がかかりすぎると、学習の進行が遅くなり、挫折しやすくなります。特に、ブラインドタッチができないと、毎回手元を確認しながら打ち込む必要があり、集中力が削がれてしまうこともあります。

    1.2 過度な期待と焦り

    「すぐに結果を出したい」「早くプロフェッショナルになりたい」という焦りも、挫折の原因となります。学習は時間がかかるプロセスであり、特にプログラミングは基礎をしっかり身につけることが重要です。しかし、早急な成果を求めすぎると、期待に応えられずにモチベーションが低下します。

    1.3 学習環境の整備不足

    適切な学習環境を整えていないことも、挫折の原因です。例えば、学習スペースが雑然としている、集中できる時間が確保できない、快適な椅子やデスクがないなど、物理的な環境が整っていないと、学習に集中できず、続けることが難しくなります。


    2. 挫折しないプログラミング学習の考え方

    2.1 タイピングスキルの向上が鍵

    まずは、タイピングスキルの向上を目指しましょう。ブラインドタッチを習得することで、コードを書くスピードが向上し、学習効率が格段に上がります。これは学習の初期段階で最も重要なステップであり、挫折しないための大きな要因となります。具体的には、毎日少しずつタイピングの練習を行い、徐々にキーボードを見ないで打てるようにしましょう。

    2.2 適切な目標設定とモチベーション維持

    プログラミング学習を継続するためには、現実的な目標設定が重要です。大きな目標を立てるのも良いですが、まずは小さな成功体験を積み重ねることがモチベーション維持につながります。また、学習を進める上での進捗を可視化し、達成感を得られるようにしましょう。例えば、簡単なプログラムを作成する、特定の機能を実装するなど、小さなゴールを設定して段階的に学んでいくと良いでしょう。

    2.3 学習環境の整備と時間の確保

    集中して学習できる環境を整えることも大切です。学習スペースをきちんと整え、できるだけ静かで集中できる場所を確保しましょう。また、学習の時間を確保するために、スケジュールを見直し、無理のない範囲で毎日少しずつ進めることが重要です。特に忙しい方は、短時間でも毎日続けることが成功への鍵です。


    3. 挫折しないための具体的なロードマップ

    3.1 ステップ1:タイピングスキルの習得

    まずは、ブラインドタッチの習得から始めましょう。オンラインで無料のタイピング練習ツールがたくさんありますので、それらを活用して、毎日少しずつ練習を重ねていきます。これにより、コードを書くための基礎体力が身につきます。具体的には、以下のようなツールが役立ちます。

    • e-typing: 日本語のタイピング練習に最適
    • TypingClub: 英語のタイピングスキルを磨くためのツール

    3.2 ステップ2:HTMLとCSSの基礎を学ぶ

    タイピングスキルが向上したら、次はWeb制作の基礎であるHTMLとCSSを学びましょう。これらは比較的理解しやすい言語であり、目に見える形で結果が得られるため、達成感を得やすいです。最初は簡単な静的ページを作成し、基本的なタグやスタイルシートの使い方を学びます。

    3.3 ステップ3:WordPressを使ったホームページ制作

    HTMLとCSSの基礎を習得したら、次はWordPressを使って実際にホームページを作成します。WordPressは多くの企業や個人が利用しているCMS(コンテンツ管理システム)で、プログラミング初心者でも比較的簡単にウェブサイトを構築できます。テーマのカスタマイズやプラグインの活用方法を学び、実際のサイトを作りながらスキルを磨いていきましょう。

    3.4 ステップ4:簡単なプログラミング言語を学ぶ

    最後に、JavaScriptやPHPなどの簡単なプログラミング言語を学んでいきます。これにより、よりダイナミックなウェブサイトを作成できるようになります。初めてのプログラミングに挑戦する際は、オンライン学習サイトやチュートリアルを活用して、基本的な文法やコーディングの考え方を学びます。


    まとめ

    プログラミング学習において挫折しないためには、まずはタイピングスキルを向上させ、無理のない目標設定と学習環境の整備が重要です。このロードマップに沿って学習を進めることで、少しずつスキルが向上し、挫折せずにプログラミングを続けることができます。是非、今回紹介した方法を実践し、成功への一歩を踏み出してください。

    もしこの記事が参考になったら、ぜひ私のInstagramアカウントをフォローして、さらなる学習のヒントをゲットしてくださいね。これからも一緒に頑張りましょう!

  • 業務効率化をシンプルかつスピーディにやるにはAppsheetがおすすめ

    業務効率化をシンプルかつスピーディにやるにはAppsheetがおすすめ

    世の中にはいろんな業務管理アプリがありますよね。出退勤管理、業務記録、在庫管理、顧客管理、営業管理…本当にたくさんあります。

    いろんな業務を一括で、かつオンラインで管理出来ればきっと仕事が楽になるよなぁ。一般的に業務管理のアプリケーションを作るとなると、専門的な知識のもと、数か月単位で構築していく必要があります。

    個人で頑張るには知識とスキルが必要だし、業者に頼むと大きな資金が必要だし…なかなか『システム導入』に対するハードルは高いでしょう。でも実はシンプルでもっと簡単にシステム導入できる方法があります。

    それが今回紹介する『Appsheet』というものになります。AppsheetはGoogleから出されているアプリケーションの作成ツールになります。もっとも大きな利点は、プログラミングのスキルがなくてもそれなりのツールが作れることです。具体的にはスプレッドシートがひらけて、文字を入力できれば開発ができるようになります。

    Appsheetとは?

    Appsheetの基本概要

    Appsheetは、Googleが提供するノーコード(プログラミング不要)アプリケーション開発ツールです。このツールを使用することで、ユーザーは複雑なコードを書くことなく、スプレッドシートやデータベースを基にしたカスタムアプリケーションを作成できます。これは特に、中小企業や個人事業主にとって大変便利です。コストを抑えつつ、迅速に業務管理ツールを導入できる点が魅力です。

    なぜAppsheetを使うべきか?

    Appsheetの最大の特徴は、誰でも簡単に使える点にあります。プログラミング知識がなくても、スプレッドシートを活用してアプリケーションを作成できます。さらに、クラウドベースのツールであるため、どこからでもアクセス可能で、リアルタイムでデータを共有することができます。これにより、リモートワークや多拠点での業務管理もスムーズに行えるようになります。

    Appsheetの使い方

    スプレッドシートからのアプリ作成

    Appsheetを使ってアプリを作成するためには、まずスプレッドシートを用意する必要があります。このスプレッドシートがアプリのデータベースとなり、各列がアプリ内のフィールドに対応します。例えば、顧客管理アプリを作成する場合、顧客名、連絡先、購入履歴などを列として設定します。次に、Appsheetにスプレッドシートをインポートし、アプリの見た目や機能をカスタマイズしていきます。

    直感的なインターフェース

    Appsheetの操作画面は非常に直感的で、ドラッグアンドドロップで項目を配置することができます。フォームやテーブル、グラフなど、さまざまなウィジェットを簡単に追加・編集できます。また、リアルタイムプレビュー機能があるため、変更を即座に確認できる点も便利です。

    Appsheetの活用事例

    出退勤管理

    Appsheetを使えば、出退勤管理アプリを簡単に作成できます。従業員がスマートフォンやタブレットから出退勤時間を入力し、管理者がリアルタイムでデータを確認・集計することができます。これにより、紙ベースのタイムカードやエクセル管理から解放され、効率的な労務管理が可能になります。

    在庫管理

    在庫管理もAppsheetで効率化できます。各商品の在庫数、入出庫履歴、発注情報などを一元管理し、在庫切れや過剰在庫の防止に役立ちます。また、バーコードスキャナー機能を追加することで、さらに便利に在庫管理を行うことができます。

    顧客管理

    顧客情報の管理もAppsheetで簡単に行えます。顧客の基本情報、購入履歴、問い合わせ履歴などを一元管理し、営業活動の効率化や顧客対応の質向上に貢献します。さらに、メール通知機能を追加すれば、顧客へのフォローアップも自動化できます。

    Appsheetのメリット

    低コストで導入可能

    Appsheetの大きなメリットは、低コストで導入できる点です。一般的な業務管理システムを導入する場合、開発費用やライセンス費用が高額になることが多いですが、Appsheetならば月額のサブスクリプション料金のみで利用できます。これにより、中小企業や個人事業主でも気軽に利用できます。

    カスタマイズ性が高い

    Appsheetは非常にカスタマイズ性が高く、各業務に合わせたアプリケーションを作成することができます。テンプレートも豊富に用意されており、それらを基に自分好みにカスタマイズすることができます。さらに、スクリプトを使用すれば、より高度なカスタマイズも可能です。

    リアルタイムでのデータ共有

    Appsheetはクラウドベースのツールであるため、データは常に最新の状態で共有されます。これにより、複数のメンバーが同時にアクセスしてもデータの整合性が保たれ、リアルタイムでの情報共有が可能です。また、デバイスを問わず利用できるため、場所を選ばずに業務を行うことができます。

    まとめ

    Appsheetを使えば、業務管理アプリケーションの導入が非常に簡単かつ迅速に行えます。プログラミングの知識がなくても、スプレッドシートさえ使えれば、直感的な操作でカスタムアプリケーションを作成できます。出退勤管理、在庫管理、顧客管理など、さまざまな業務に対応したアプリを低コストで導入できる点も魅力です。リアルタイムでのデータ共有や高いカスタマイズ性も備えており、業務効率化に大いに役立つでしょう。ぜひ、Appsheetを活用して、シンプルかつスピーディな業務効率化を実現してみてください。

    あなたも、Appsheetで作成したアプリケーションに興味を持たれた場合は、お気軽にお問い合わせください。お手伝いできることがあれば幸いです。

  • Appsheetの活用

    Appsheetの活用

    今月は自分の商品を作成していくことと、既存の商品をアフィリエイトしていくこととして情報発信をしていこと考えています。

    自分の商品は大きく2つ。一つは講座として自分の経験を誰かに伝えていくこと。

    そしてもう一つがタイトルにあるような、Appsheetの活用です。

    Appsheetはノーコードでアプリが作れるという優れものでして、どんなものが作れるかというと、勤怠管理アプリだとか顧客管理アプリだとか、有料のものにアップグレードすればOCR(画像認識)の機能なんかを使ってアプリを作ることができるようになります。

    Googleのスプレッドシートはよく活用していて、既存のプログラミング言語でサイトを構築して、データベースとしてスプレッドシートを利用することは経験あるのですが、Appsheet…というかノーコード開発については結構懐疑的な方でした。

    でもやってみてびっくり。めっちゃ簡単じゃん。

    これやらないてはないよね。

    ってな感じで、どんなものが作れるのか色々チャレンジ中なわけであります。

    自分で作成しているものとしては、勤怠管理アプリ、患者管理アプリ(予実管理を目指している)、家計簿アプリがあって
    他にも親子向けのお手伝い管理アプリなんかも簡単に作れそう。

    ノーコード開発は懐疑的でしたが、その理由としては細かなカスタマイズができないから。結局似たり寄ったりになるんでしょ?という思いが強くて手を出していませんでした。

    でもものは考えようで、細かなカスタマイズができないからこそ、機能の方に注力できるようになったりするわけですね。そして細かなカスタマイズができない分、制約があるからこそ頭を絞って焦点を見つけながら開発していくことができるのも良さだなぁと思いました。

    これまでweb制作もWordPressでオリジナルテーマで作らなきゃ!って思っていたのですが、これからはWixやStudioなどローコード・ノーコード開発についても積極的に触れていこうと思いました。

  • エルステップを使わない公式LINEの構築

    エルステップを使わない公式LINEの構築

    LINEを使ったマーケティングを考えた時、公式LINE単体だと機能がちょっと物足りないように思います。

    かといって外部のサービスを導入するにも費用的な問題もあるし、ランニングコストがかかるのもなぁなんて方も多いはず。

    そんなこんなで自分で実装してしまおうと思いまして、技術鍛錬として作ることにしました。

    今回使用している技術スタックとしては

    • HTML/CSS
    • Google apps script
    • React
    • Astro
    • Firebase
    • Supabase
    • Google spreadsheet

    1:LINEログイン機能の実装

    用途:GoogleログインやGithubログインと同列にLINEでもログインができるようにする

    メリット:自社サービスに置いて、会員・非会員でのコンテンツを分けたいなどの時にユーザーにとっての選択肢が広がる

    https://line-astro-supabase.vercel.app/
    サンプル

    LINEログインとLIFFログインの違いについてはこちらのポストの通り

    2:リッチメニューのカスタマイズ

    公式LINEのデフォルト機能では、リッチメニューの複雑なカスタマイズができません。たとえばタブを使って表示させるメニューを変えるなどする時には専門的な知識が必要になります。

    用途:リッチメニューをタブグループに分けて表示させる

    メリット:表示させたい項目が多い時でも好きに表示させることができる・他社と差別化が図れる

    3:LINEミニアプリで予約機能の実装

    用途:カレンダー機能を作成して日・時間単位での予約をLINEで完結できるようにする

    メリット:上記の通り

    4:LINEpayを使って決済機能の実装

    5:ステップ配信機能の構築

    これは技術鍛錬というよりは、実際にどんな考えで、どんなメッセージを作っていくのかということをまとめています。

    今回は、オンラインでのコーチングサービスを販売していきたいコーチ業の方を想定したものになります。

    6:データベース機能の実装

    7:アカウントフォロー時のアンケート

    用途:新規ユーザーに対して好みを確認し、今後のターゲティングに活用する

    メリット:フォロー時のイベントに設定することでこちらからアクション起こさずともユーザー情報の取得が可能

    以下のLINE友達追加ボタンからサンプルのアカウントを追加するとアンケートの雰囲気を確認することができます。

    友だち追加
  • GmailをLINEに転送するツールを作りました【GAS✖️LINE】

    GmailをLINEに転送するツールを作りました【GAS✖️LINE】

    https://ticket.tsuku2.jp/events-detail/08522108253920

    個人・会社問わず、物販をやっている方にはぴったりなツールを作ってみました!

    入金・購入通知など特定のメールをGmailで管理している場合、わざわざそのメールを探しにいくのって面倒ですよね?

    そういった時に、「定期的に」「自動で」通知を送ってくれるツールになります。

    設定は簡単ですし、オンライン通話しながら設定していきます(特に問題なければ30分程度で終わります)

    興味ある方は下の商品ページよりお買い求めください。

    https://ticket.tsuku2.jp/events-detail/08522108253920
  • 【GAS✖️Spreadsheet】業務の可視化に簡易打刻システムを作成

    【GAS✖️Spreadsheet】業務の可視化に簡易打刻システムを作成

    世の中に業務時間とか稼動時間を記録するアプリってたくさんあるけど、スプレッドシートで自分なりに作れたらいいなぁと思っていました。

    自分の場合は、朝・日中・夜みたいな感じで1日に複数時間に分けて稼動することがあるので、そういった部分で記録をとれたらなぁと。

    こういうのって探して見つかることも多いけど、微妙にスプレッドシートのフォーマットがずれて修正したら今度はプログラムがエラーってこともあるので自作しました。

    サンプル動画

    コード

    const File = SpreadsheetApp.getActiveSpreadsheet();
    const ss = File.getActiveSheet();
    
    function WorkStart(){
        // B列(朝業務開始)の最終行を取得
        var lastRow = ss.getRange("b4").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
        
        // 現在時刻を取得
        var now = new Date();
        now = Utilities.formatDate(now, "Asia/Tokyo", "HH:mm:ss");
        console.log(now);
    
        // 現在時刻を本日分のところにセット
        ss.getRange(lastRow+1,2).setValue(now);
    }
    
    function WorkStop(){
        var lastRow = ss.getRange("b4").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
        var col = ss.getRange(lastRow,1).getNextDataCell(SpreadsheetApp.Direction.NEXT).getColumn();
        
        // 現在時刻を取得
        var now = new Date();
        now = Utilities.formatDate(now, "Asia/Tokyo", "HH:mm:ss");
        // console.log(now);
    
        // 現在時刻を本日分のところにセット
        ss.getRange(lastRow,col+1).setValue(now);
    }

    あとはこれをカスタムメニュー作って入れればバッチリ!!

  • WordPressでマニュアル閲覧サイトを作った話【PHP】

    WordPressでマニュアル閲覧サイトを作った話【PHP】

    勤務先で使っているマニュアルたちの管理が煩雑になったということでどうにかできないもんかと相談がありました。
    こちらの会社でしていたマニュアル作成・管理は以下の通り

    • word、excel、powerpointなど種別問わず部署や個人単位でマニュアルを作成
    • もともとは個人のPC管理していたものをDropbox共有していたが探しにくい、わかりにくい。
    • デジタルリテラシーにも差があり、多職種が一つの場所で勤務していてそれぞれ職種ごとにマニュアルを探したい

    こんな状況だったので以下の提案を行いました

    • DropboxからGoogle driveでのアップロード、管理に切り替え
    • 作成したマニュアルの種別は問わないが、アップロードした際に共有権限を設定するよう徹底(じゃないと見れない時がある)
    • 閲覧自体(コンテンツをクリックした時の飛び先)はGoogleのままとして、それらを検索できるような仕組みとしてWordPressでサイトを作る

    とにかく見やすくなってわかりやすくなれば良いよとのことで、制作を始めました。

    実はこれまで同じような考えでnotionを使って管理をしようとしていたのですが、

    • 職員への周知がうまくいかない
    • 意外と検索するための操作が直感的でなかった(フィルター・ソート機能は良かったけども)

    といった感じでnotionは職場風土的に合わなさそうというのも経験しましてWordPressでカスタマイズしちゃおうと考えたわけです。

    使用したテーマ

    オリジナルテーマを作成しました。
    理由としては、詳細ページについての作り込みをする必要がなかった+独自にページを追加していく方が良かったから。

    個人的にはブログ機能をしっかり作り込みたいとかの時には既存テーマがいいと思ってますが、デザインにこだわりなく機能面だけ好き勝手いじりたい時ならオリジナルテーマの方が早いしプラグイン依存も最低限で済むと思っています。

    テーマ構成

    必須ファイル以外だとこんな感じ

    使用したプラグイン

    サイトを運用していく上での動線やUI設計

    • 職員(ユーザー)はサイトトップURLにアクセスしたらログインを迫られる
    • ログインについては管理者である私の方でアカウントを作成・周知済みとしてそれを使ってログイン
      (特にメール認証や2段階認証は付けなくて良いと判断)
    • ログイン後は画面上部に置いた『検索バー』を利用して、マニュアルタイトルの関連語句で検索
    • コンテンツ本体部分は新着アップロード順でマニュアルを表示
    • コンテンツサブ部分にはWordなどのファイル種別、もしくは職種別で絞り込めるようなソート機能を実装
    • 検索や絞り込みしたマニュアルは複数ページに渡って表示
    • マニュアルタイトルをクリックするとGoogle drive内の当該ファイルにアクセスして閲覧することができる

    といった状態にしました。

    ちなみにこの辺の言語化・具体化についてはFigmaを使用しました。
    言うたら個人開発になるわけですが、頭の中をスッキリ整理した方がやりやすいかと思って作ってみました。

    そして今回の場合、スマホもしくはipadでの利用が多いことが想定されたため、UI設計も大きな画面というよりタブレット以下の画面を想定して作成してみました。

    テンプレートパーツの読み込みなど基本的なところで参考になった記事

    https://gri-t.com/wordpress_get_template_part/
    https://wemo.tech/400

    ログイン機能・ログアウト機能実装に関して参考になった記事

    https://www.tti-co.com/engblog/simple-membership-plugin/

    https://webgaku.net/jp/wordpress/check-administrator/#:~:text=%E5%88%A4%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-,%E7%8F%BE%E5%9C%A8%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%8C%E7%AE%A1%E7%90%86%E8%80%85%E3%81%8B,%E3%81%AA%E3%81%A9%EF%BC%89%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

    カスタム投稿タイプ・カスタムタクソノミー設定に関して参考になった記事

    https://hirashimatakumi.com/blog/5509.html

    http://galileo-venus.com/2020/05/22/20200518_wp_acfsearch/#%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%82%92ACF%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%95%E3%81%9B%E3%82%8B

    https://stoock.xyz/wordpress/acf-custom-search/

    サイト内検索機能の実装で参考になった記事

    https://www.onamae.com/column/wordpress/57/
    https://kasumiblog.org/125-2/
    https://www.wp-benricho.com/wordpress-search-ci/

    メインループ・サブループ作成に関して参考になった記事

    ページ送りについて参考になった記事

    クエリのインスタンス化する際の引数に入れる配列で、paged=>$pagedを入れていないことが原因でページ送りうまくいかない話を確認することができました。
    https://kt-life.net/pagenation-wp/

    今回の公開先はエックスサーバーで独自いを取得してすることになりましたが、いずれはサーバーおよびドメインの移管作業もしておきたいところ(管理を一元化していく目的で)