Blog

  • React 単体のプロジェクトに sitemap を導入してSEOスコアを向上させる

    React 単体のプロジェクトに sitemap を導入してSEOスコアを向上させる

    React単体でsitemap を導入する方法について解説します。

    通常はバックエンドに他のフレームワークを使っている場合は、そちらでやるのが一般的だと思いますが、React をビルドしてシンプルに運用している場合は、自分で作るしかありません。

    やり方 手動

    public ディレクトリの下に sitemap.xml を作成します。

    そこにたとえば以下のように記述します。

    <?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
      <url>
        <loc>https://yourdomain.com/</loc>
        <priority>1.0</priority>
      </url>
      <url>
        <loc>https://yourdomain.com/company</loc>
        <priority>0.8</priority>
      </url>
      <url>
        <loc>https://yourdomain.com/office-treatment</loc>
        <priority>0.8</priority>
      </url>
      <!-- 他のルートをここに追加 -->
    </urlset>

    続いて robots.txt に以下のように記述します。

    Sitemap: https://your-page.com/sitemap.xml

    your-page のところはあなたのドメインに置き換えましょう。

  • React TS でスニペットを使って楽をする React Snippets Extension 【VS code 拡張機能紹介】

    React TS でスニペットを使って楽をする React Snippets Extension 【VS code 拡張機能紹介】

    初めての開発や久しぶりの開発で便利な React TS 用に VSCode で便利な拡張機能をします。

    また、私の使うスニペットの紹介と、スニペットの追加方法の紹介をします。

    スニペットの追加 『自分で追加する場合』

    ユーザースニペットファイルを開く

    Shit + cmd + p でコマンドパレットを開きます。

    こういったメニューが開く


    Snippets: Configure Snippets を検索して、選択します。

    tsx と入力して、tsx ファイルでスニペットが効くように設定しましょう。

    typescriptreact.json というファイルが開くので、例えば以下のように入力しましょう。(以下は私の設定)

    {
    	"React Functional Component": {
      "prefix": "rfc", // 好きなショートカットキー
      "body": [
        "import React, { Component } from 'react';",
        "",
        "const ${TM_FILENAME_BASE}: React.FC = () => {",
        "  return (",
        "    <>${2:hello}</>",
        "  );",
        "};",
        "",
        "export default ${TM_FILENAME_BASE};"
      ],
      "description": "React Functional Component template"
    }
    }

    ちょっとした説明をすると

    • “prefix”: スニペットを呼び出す際に入力するショートカット(例: rfc)。
    • “body”: 実際に挿入されるコード。${1} や ${2} はタブ補完用のプレースホルダー。
    • “description”: スニペットの説明。
    • ${TM_FILENAME_BASE} ファイル名から取得

    といった感じです。

    React Snippets Extension『あるものを使う場合』

    VS Code ES7+ React/Redux/React-Native/JS snippets という拡張機能をインストールしよう。

    https://marketplace.visualstudio.com/items?itemName=dsznajder.es7-react-js-snippets

    rcc

    styled component を含み、状態管理などの基本的な部分も書かれています。

    import React from 'react';
    import styled from 'styled-components';
    import PropTypes from 'prop-types';
    
    // #region constants
    
    // #endregion
    
    // #region styled-components
    
    // #endregion
    
    // #region functions
    
    // #endregion
    
    // #region component
    const propTypes = {};
    
    const defaultProps = {};
    
    /**
     * 
     */
    class Staff extends React.Component {
    constructor(props) {
      super(props);
    
      this.state = {
      };
    }
    
      render() {
        return <div></div>;
      }
    }
    
    Staff.propTypes = propTypes;
    Staff.defaultProps = defaultProps;
    // #endregion
    
    export default Staff;

    rccp

    styled component を含まないもっと単純な骨組みに使えます。

    import PropTypes from 'prop-types'
    import React, { Component } from 'react'
    
    export default class Staff extends Component {
      static propTypes = {second: third}
    
      render() {
        return (
          <div>Staff</div>
        )
      }
    }
    

  • カルーセルを作る React TS, react-multi-carousel

    カルーセルを作る React TS, react-multi-carousel

    カルーセルを作る方法についてのコードです。

    Joy UI, react-multi-carousel を使って実装しました。

    Joy UI のインストール

    Swiperの公式ドキュメントはこちらから。https://swiperjs.com

    yarn add swiper

    Joy UI はこちらから。個人的な意見恐縮ですが、MUIよりも手軽に使えることから Joy UI を好んで使っています。
    ↓ get start はこちらから
    https://mui.com/joy-ui/getting-started/

    yarn add @mui/joy @emotion/react @emotion/styled

    カードのスタイルを作る Joy UI

    なんでもいいのですが、とりあえずカードのスタイルを作ります。
    Joy UI を使用しているので適宜インポートしてください。

            {/* Section Member Staff */}
            <Box sx={{ p: 2, maxWidth: '880px', margin: 'auto', my: 10 }}>
              <Box sx={{ mb: 2 }}>
                <Typography level='h2' sx={{mb: 1}}>施術師</Typography>
                <Typography>スタッフ情報をご紹介します。</Typography>
              </Box>
              <Card sx={{ width: 320, maxWidth: '100%', boxShadow: 'lg' }}>
                <CardOverflow>
                  <AspectRatio ratio={1 / 1}>
                    <img src="/static/images/avatar/1.jpg" alt="Staff" loading='lazy' />
                  </AspectRatio>
                </CardOverflow>
                <CardContent>
                  <Typography level="body-sm" >代表</Typography>
                  <Typography level="title-lg" >スタッフ名</Typography>
                  <Typography level='body-sm'>鍼灸師・柔道整復師</Typography>
                </CardContent>
              </Card>
            </Box>
    Card Style with Joy UI

    このような感じでスタイリングしました。

    一例です。

    react-multi-carousel でカルーセルを実装

    react-multi-carousel とは何か?

    簡単にReactのプロジェクトにカルーセルを実装できるコンポーネントです。

    • アニメーション対応
    • レスポンシブ対応

    なのが特に嬉しい点に思いました。

    やり方

    ↓ 以下のドキュメントに従って使えばOK
    https://www.npmjs.com/package/react-multi-carousel

    インポートして<Carousel>で囲むだけですぐに動作するので簡単で素敵

    Carousel with React-multi-carousel

    とりあえず最小構成で組んでみましたが、下記ページに作例がたくさん紹介されているので、よりリッチにしたい方は CodeSandbox を見るのが良さそう。

    https://codesandbox.io/examples/package/react-multi-carousel

    react-multi-carousel の使い方の簡単な解説

    コメントアウト付きでオプションの解説をメモしておきました。

    // 必要なライブラリをインポート
    import React from 'react';
    import CarouselLibrary from 'react-multi-carousel'; // カルーセル用のライブラリ
    import 'react-multi-carousel/lib/styles.css'; // カルーセルのスタイルシート
    
    // デバイスごとの表示設定を定義
    const deviceSettings = {
      desktop: {
        breakpoint: { max: 3000, min: 1024 }, // デスクトップ用の画面幅の範囲
        items: 3, // 一度に表示するアイテム数
        slidesToSlide: 3, // 一度にスライドするアイテム数
      },
      tablet: {
        breakpoint: { max: 1024, min: 464 }, // タブレット用の画面幅の範囲
        items: 2,
        slidesToSlide: 2,
      },
      mobile: {
        breakpoint: { max: 464, min: 0 }, // モバイル用の画面幅の範囲
        items: 1,
        slidesToSlide: 1,
      },
    };
    
    // カルーセルコンポーネントの定義
    const GeneralCarousel = () => {
      return (
        // CarouselLibraryコンポーネントを使用
        <CarouselLibrary
          swipeable={false} // スワイプ操作を無効化
          draggable={false} // ドラッグ操作を無効化
          showDots={true} // 下部にページング用のドットを表示
          responsive={deviceSettings} // デバイスごとの設定を適用
          ssr={true} // サーバーサイドレンダリングを有効化
          infinite={true} // 無限スクロールを有効化
          autoPlay={true} // 自動再生を有効化
          autoPlaySpeed={3000} // 自動再生の速度を設定(3秒間隔)
          keyBoardControl={true} // キーボード操作を有効化
          customTransition="all .5" // カスタムの遷移アニメーション(0.5秒)
          transitionDuration={500} // 遷移のアニメーション時間を設定
          containerClass="carousel-container" // カスタムスタイルを適用するためのコンテナクラス
          removeArrowOnDeviceType={["tablet", "mobile"]} // 特定のデバイスで矢印を非表示
          dotListClass="custom-dot-list-style" // ドットのカスタムスタイルクラス
          itemClass="carousel-item-padding-40-px" // アイテムの間隔スタイル
        >
          {/* 表示するアイテムを定義 */}
          <div>Content 1</div>
          <div>Content 2</div>
          <div>Content 3</div>
          <div>Content 4</div>
          <div>Content 5</div>
        </CarouselLibrary>
      );
    };
    
    // コンポーネントをエクスポート
    export default GeneralCarousel;

    以上のコードで div タグの部分を先ほど作ったカードに置き換えれば、カードをカルーセルで動作させることができます。

    そのほかのコンポーネント

    Swiper

    https://swiperjs.com
    こちらも試してみました。

    <Swiper>の子要素に<SwiperSlide>を置くだけでシンプルに使い始められることが利点だと感じました。
    また、デモも豊富でリッチなカルーセルを構築できるように思います。

    個人的な使用感として、カラム同士のスペースの取り方が使いづらく感じて辞めました。

  • Unity UIをカスタマイズ Shapes2D

    Unity UIをカスタマイズ Shapes2D

    Unity UI 作るのめんどくさい問題。

    Web や モバイルAppの場合はMUIなどのUIライブラリを使えます。
    Unity で簡単で無料で使えるライブラリはないかと探していました。

    今回は使っていていい感じな Shapes 2D の使い方のメモです。

    ↓ Shapes 2D のアセットストアのリンク
    https://discussions.unity.com/t/free-shapes2d-procedural-2d-shapes-for-sprites-and-ui/627914

    手順

    Shapes 2Dの公式ドキュメントはこちらから確認できます。

    https://sub-c.org/Shapes2D/documentation

    標準のボタン

    まず最初の状態です。

    Shapes2D

    Body と書いてあるボタンをカスタマイズしていこうと思います。
    (それ以外のボタンは既にShapes 2D を適応しています)

    Shapes 2D Component の追加

    Asset Store からダウンロードしてインポートします。

    次にスタイルをつけたいオブジェクト(ボタン)をヒエラルキーから選択します。
    続いて、インスペクターパネルから[Add Component]ボタンをクリックして[Shapes 2D]を選択します。

    ヒエラルキーから選択
    スタイルを効かせたいものをヒエラルキーから選択
    Add Component からShapeを選択
    Add Component から shapes を選択

    形を変える

    以下のような感じで、shape Type を Rectangle に設定して、Roundness Per Corner にチェックを入れると上の左右だけに角丸をつけられます。

    このようにこのコンポーネントを使うと他にも、5角形など様々な形を選択でき、角丸の設定も容易にできるため、ゲームのようなリッチなUIではなく、Web埋め込みなどで使う場合や、業務用のプロジェクトにちょうどいいなと思います。

    角丸にする
    私の設定例
    Bodyのボタンがタブ選択ボタンの見た目としていい感じになった!
    Bodyのボタンがタブ選択ボタンの見た目としていい感じになった!

    まとめ

    コードを書いてUIを作っていける UI Toolkit 等もあるので、そちらも試してみたいと思います。

  • Blender ジオメトリノードでファスナー(ジッパー)制作 & メッシュに変換する方法

    Blender ジオメトリノードでファスナー(ジッパー)制作 & メッシュに変換する方法

    以下のYoutubeの線路を作る解説記事が神のように導いてくれました!!!!!

    私の記事を読む前に必ずこの動画様を見ましょう!!!!

    この記事では特に

    ジオメトリノードから、メッシュに変換する部分を肝に解説しています。

    よしなに。

    ファスナーの歯を作る

    頑張ってモデリングしよう!

    こんな感じで作ったよ!〜

    ファスナーの歯のモデリング
    ファスナーの歯のモデリング2

    ジオメトリノードを使用しファスナー全体を作る

    下記のようなノードを組みました。
    これは https://www.youtube.com/watch?v=YsmERQUBmvc こちらの動画様をかなり参考にしています。
    ここまでは上記リンクで解説されていることですので、あまり詳しく触れません!!

    ジオメトリノードの組み方

    この時点で以下の画像のような見た目になっています。

    ジオメトリノードで作ったファスナー
    ジオメトリノードで作ったファスナー

    本題:カーブをメッシュへ変換

    最後にカーブをメッシュに変換します。メッシュに変換した後でないと、モディファイアを適応できません。

    この時点でモディファイアをかけようとすると、
    生成モディファイアーはカーブに適用できません先にカーブをメッシュに変換してください“といった警告が出ます。

    まずはジオメトリノードの最後に[カーブのメッシュ化][インスタンス実体化]を挟みましょう。

    最後にインスタンス実体化を挟もう

    この後にオブジェクトモードにして、

    • 右クリック
    • 変換
    • カーブ

    の手順でうまくできるはずです!

    カーブからメッシュへの変換
    完成形

    おまけ

    他のジッパーの持ち手部分もモデリングしておきます。

    アドオンなどを使えば、既に完成していてアニメーション付きのものもあるので、余裕がある場合そっちを買ったほうが早い!!!!😭

    ここまで読んでくださり、ありがとうございました!!!

    同じことで困っている方がいて解決できたら嬉しいです😭

  • Unity 回転の中心位置が微妙で使いづらい問題

    Unity 回転の中心位置が微妙で使いづらい問題

    ⚠️ この記事はカスです。何も解決していません。ごめんなさい。

    以下のようなコードを書いてゲームオブジェクトに追加する。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class RotateObject : MonoBehaviour
    {
        public float rotationSpeed = 100f; // 回転速度
    
        private Vector3 lastMousePosition; // 前回のマウス位置
    
        void Update()
        {
            if (Input.GetMouseButtonDown(0)) // マウス左クリック開始時
            {
                lastMousePosition = Input.mousePosition;
            }
            else if (Input.GetMouseButton(0)) // マウスをドラッグ中
            {
                Vector3 delta = Input.mousePosition - lastMousePosition; // マウス移動量
                float deltaX = delta.x * rotationSpeed * Time.deltaTime; // X方向の回転量
                float deltaY = delta.y * rotationSpeed * Time.deltaTime; // Y方向の回転量
    
                // オブジェクトを回転
                transform.Rotate(Vector3.up, -deltaX, Space.World);  // 水平方向の回転
                transform.Rotate(Vector3.right, deltaY, Space.World); // 垂直方向の回転
    
                lastMousePosition = Input.mousePosition; // マウス位置を更新
            }
        }
    }
    

    上記の動画のように回転の中心位置がずれいて、使いづらい😭

    原因と解決策

    この靴のモデルはBlnderで自分で作ったものでした。

    回転の原点がずれているのかをまず確認しました。

    確認するにはUnityのシーンビューの上部の Pivot/Center 切り替えボタンをクリックして Pivot に切り替える。

    どうやら大丈夫そうです。シーンビューでは心地よくオブジェクトを回転させることができました。

    嘘です!!!

    まだ欠陥があります!!!

    後で直そうと思うので、とりあえず記事を公開しました。

    ごめん!!!!

  • iMac の復旧ができなくなった “mac インストールの準備中にエラーが起きました”

    iMac の復旧ができなくなった “mac インストールの準備中にエラーが起きました”

    先日 AppliSilicon M1 iMac を譲り受けました。
    その際初期化したところ、OSのインストール時にエラーが起きてしまい、起動できなくなってしました。

    今回はそれの解決方法の記事です。

    環境

    壊れた方の iMac

    • Apple Silicon M1
    • Ventura
    • 16GB

    回復に使用した MacBook Air

    • Apple Silicon M1
    • Sequoia 15.0.1
    • 16GB

    問題の起きた場面と、エラー画面

    [macOS Ventura を再インストール]のボタンを押して、インストール画面に進むと以下のようなエラー画面が出てしまっていました。

    mac インストールの準備中にエラーが起きました

    このポップアップが出て、OSのインストールが完了しませんでした。何度やっても同じなのと、ディスクユーティリティで First Aid や削除も試しましたが、永遠に同じエラーが出続けました。

    画像撮ってなかったので、知恵袋で同じような悩みの方の画像引用させていただきます。
    https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14292903294

    Apple のサポートページにも同じ症状の方がいました。

    https://discussionsjapan.apple.com/thread/255485243?sortBy=rank

    ちなみにエラーログは下記の通りです。ログからエラーの解決には繋がらなかったので画像のみで失礼します。

    error log

    解決した方法 DFU

    DFU(Device Firmware Update)とは、Appleデバイスのファームウェアをアップデートしたり修復したりするためのモードです。

    この方法は正常に動作している mac OS が手元にある場合にできる方法です。

    0. 壊れていない Mac を用意して Apple Configurator をインストールする

    私の場合 Apple Silicon M1 MacBook Air を使いました。

    この MacBook に Apple Configurator というアプリをインストールしておきます。

    https://apps.apple.com/jp/app/apple-configurator/id1037126344?mt=12

    1. ディスクユーティリティの操作

    iMac の復旧画面からディスクユーティリティを選択します。
    次にMachintosh HD の項目があるので、これを削除します。

    2. iMac(壊れている方) と MacBook(壊れていない) をつなぐ

    iMac と MacBook をケーブルで接続します。
    私は MacBook に付属していた C to C の充電ケーブルで動作を確認しました。

    3. iMac の電源コードを抜く

    iMac をシャットダウンして、電源コードを抜きます。

    4. DFUモードに入る

    電源ボタンを押しながら、電源ケーブルを指します。

    電源長押しではありません。私はずっと長押しでやるものだと勘違いしてました😭

    DFUモードに入ると iMac 側の画面は真っ暗なままですが、 MacBook Air (正常に動作している方)に [アクセサリの接続の許可]のダイアログが出てくるはずです!

    MacBook Air の Apple Configurator アプリ上では、以下のように DFU のアイコンが表示されるはずです。

    5. configurator から復旧する

    DFUアイコンの上から右クリックをします。
    そこから[復元する]という項目をクリックします。

    確認のポップアップが表示されるので、あとは[OK]を選択していけば大丈夫です!

    6. iMac でOS再インストールする

    この後 iMac が復旧するはずです!?
    私の環境では以下のように表示されました。

    mac os recovery

    画面の表示に従って再起動をすると

    セコイアインストールできた!

    [Reinstall macOS Sequoia]の文字が!!!

    これをする前までは[Reinstall macOS Ventura ]だったため、外部のmacから操作できたことが確認できました!

    参考

    Apple Configure2 ついて

    https://support.apple.com/ja-jp/guide/apple-configurator-2/apdd5f3c75ad/mac

    復旧についてのApple公式ページ

    https://support.apple.com/ja-jp/108900

  • Unity Git 管理 with Git LFS

    Unity Git 管理 with Git LFS

    この記事は?

    Unity のプロジェクトをGitで管理する方法です。SourceTree などを使った方法は直ぐに検索に出てきますが、すでにGitを使ったことがある方に向けた記事です。

    使用環境

    • Apple Silicon M1 MacBook Air
    • 16 Gb
    • macOS Sequoia 15.0
    • Unity 2022.3.31f1

    やり方

    Unityの設定
    .gitignore の作成
    Git LFS

    の3つの設定を順に紹介していきます。

    Unity 側の設定

    Unity のメニューの Edit/ Project Settings を開きます。

    左側のメニューからEditorを選択。

    Asset Serialization という項目があるので Force Text にします。(おそらく標準でなってる?)

    Unity Settings

    シーンやPrefabをテキスト形式で保存する設定のようです。
    Gitでの競合の解決を簡単にするために、バイナリ形式でなくテキスト形式にしました。

    Gitの設定

    Gitで管理したいファイルは下記の通りです。

    • Assets
    • Packages
    • ProjectSettings
    • UserSettings

    必要のないものはignoreに設定します。

    ルートディレクトリに .gitignore ファイルを以下の内容で作成しました。

    # Unity関連の生成ファイルを無視
    [Ll]ibrary/
    [Tt]emp/
    [Oo]bj/
    [Bb]uild/
    [Bb]uilds/
    [Ll]ogs/
    
    # 特定のプラットフォーム関連ファイル
    [Dd]ebugPublic/
    [Mm]emoryCaptures/
    [Uu]ser[Ss]ettings/
    
    # Visual StudioやJetBrains Rider関連
    .vscode/
    *.csproj
    *.unityproj
    *.sln
    *.suo
    *.user
    *.userprefs
    *.pidb
    *.booproj
    *.svd
    
    # その他
    *.swp
    *.lock
    *.idea/
    

    GitLFSの設定

    標準のGit を使っていて、サイズの大きなもののアップロードで警告が出たことはありませんか?

    ゲーム制作では3Dモデルや画像データなどが膨大になってしまうので、これでは厳しいです。

    そこでGit LFS を使用します。

    Git LFS(Git Large File Storage)は、大きなファイルやバイナリファイルを効率的に管理するためのツールです。

    Homebrew で Git LFS をインストール

    インストールしたことがない方はBrew からインストールします。

    https://formulae.brew.sh/formula/git-lfs

    brew install git-lfs

    インストールしたことある方はversion を確認します。

    git lfs --version

    Git の初期設定

    プロジェクトのディレクトリへ移動します。

    cd /あなたのプロジェクトディレクトリ

    Git を初期化します。

    git init

    LFSの有効化をします。

    git lfs install
    Updated Git hooks.
    Git LFS initialized.

    上手くLFSが有効化されると返答されます。

    管理したいファイルタイプを指定します。
    画像と3Dデータが重いので私は下記のように指定しました。

    git lfs track "*.png"
    git lfs track "*.fbx"

    あとは普段通りGit 操作します。

    git add .
    git commit -m "initial commit"

    補足 Git LFS が有効化されているか確認する

    git lfs ls-files

    上手くできていればした画像のように表示されるはずです。

    git LFS

  • レンタルサーバーで Unity WebGL 埋め込み This can happen if build compression was enabled

    レンタルサーバーで Unity WebGL 埋め込み This can happen if build compression was enabled

    WordPress にUnityで制作したものを埋め込む際に下記のようなエラーが出ました。

    WordPressの wp-content/upload の直下にビルドしたフォルダをアップロードしました。

    This can happen if build compression was enabled but web server hosting the content was misconfigured to not serve the file with HTTP Response Header "Content-Encoding: gzip" present. Check browser Console and Devtools Network tab to debug.

    これの解決方法です。

    サーバー側のGzip対応を確認

    私の利用しているロリポップではGzipに対応しています。

    https://support.lolipop.jp/hc/ja/articles/360048374954-GZIP%E3%81%AF%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B

    以下のように .htaccess を作成し、build フォルダや index.html があるディレクトリに .htaccess をアップロードしました。

    <IfModule mod_mime.c>
        # WebAssembly用のContent-Type設定
        AddType application/wasm .wasm
        AddEncoding gzip .gz
    </IfModule>
    
    <IfModule mod_headers.c>
        # gzip圧縮ファイルのContent-Type設定
        <FilesMatch "\.wasm\.gz$">
            Header set Content-Encoding gzip
            Header set Content-Type application/wasm
        </FilesMatch>
    </IfModule>
    
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTP:Accept-Encoding} gzip
        RewriteCond %{REQUEST_FILENAME}.gz -f
        RewriteRule ^(.*)$ $1.gz [QSA,L]
    </IfModule>

    公開できました!

    ここに行くには早朝なのでバスで向かいます。(JRバスが5時代でも出ているはずです)

    6:00–10:00 まで空いていて、朝食も課金すれば食べられます。
    さらにタオル貸し出しなので余計な荷物を持って行かなくても大丈夫です。

    深夜バスは基本寝れていないと思うので、ここで仮眠するのもいいでしょう。

    深夜編 23時以降

    深夜は銭湯に行くのもいいでしょう!京都には銭湯がいっぱいあります。

    しかし、23時はおそらく気分が乗っていて仕事をしたくなっているはずです!

    ということでカフェに入りましょう!

    スターバックスはお勧めしません!なぜならみんな考えていることは同じだからです!

    おとなしくベローチェへ行きましょう。ここは電源の数が非常に多いです。

    中央口のマクドナルドもいい選択肢ですが、人が多くて落ち着かないのと、電源の位置が少ないこと。また、楽天回線の問題なのか電波にやや不安があるので中央口にあるベローチェが安牌です。

    しかし 22:45 分までしか空いていないのが問題ですね……。あとは諦めて外で待ちましょう()

    深夜バス必須アイテム

    夏のバスはかなり寒いです。おじさん向けの冷房設定になっています!

    必ずブランケット厚手の靴下を持っていきましょう。

    耳栓やアイマスクも必須です。寝ないつもりでも快適度がかなり変わります!

    良いたびを〜〜

  • Flutter で Firebase を使うには?導入までのコマンド紹介

    Flutter で Firebase を使うには?導入までのコマンド紹介

    これは何?

    FlutterでFirebaseを使う場合のコマンドの紹介です。

    環境

    • AppleSilicon M1 MacBookAir
    • macOS
    • firebase cli version 13.23.0 
    • Flutter version 3.24.4

    やり方

    1 プロジェクトの作成

    firebase のページにアクセスして、プロジェクトを作成しましょう。

    https://console.firebase.google.com

    firebase

    2 Firebase Cli の設定

    環境ごとに異なると思いますので、各々公式のガイドを参考に進めてください。

    3 CLIの初期操作

    firebase login

    このコマンドでブラウザが立ち上がり、Googleのアカウントの選択と権限の確認が出てきます。

    firebase projects:list

    ログインの確認も兼ねて上記コマンドを実行してみてください。
    ステップ1で作ったプロジェクト名と projectID などが出てくると思います。ProjectID はこの後使うのでコピーしておきましょう。

    4 Flutterへの設定

    まずFlutterプロジェクトのあるディレクトリへ移動しましょう。

    cd あなたのFlutterプロジェクトのディレクトリ

    次に下記コマンドを実行してパッケージを追加します。

    flutter pub add firebase_core

    つづて下記コマンドを実行します。

    dart pub global activate flutterfire_cli

    このコマンドを実行した後、パスを通す必要があります。
    AppleSilicon mac をお使いの方はターミナルはzshだと思いますので下のコマンドを実行します。

    echo 'export PATH="$PATH:$HOME/.pub-cache/bin"' >> ~/.zshrc

    できたら、保存したzshの設定をターミナルに読み込ませるのに下記コマンドを実行します。

    source ~/.zshrc

    最後に以下コマンドを実行します。[さっきコピーしたID]のところは自分のIDで入れ替えてください。

    flutterfire configure --project=さっきコピーしたID

    実行すると

    ✔ Which platforms should your configuration support

    これはどのプラットフォームで使うのか聞かれています。
    スペースを押すとチェックを外せます。
    全部のプラットフォームで使うならこのままEnterを押して進みます。

    次に

    ? Which Android application id (or package name) do you want to use for this configuration, e.g. ‘com.example.app’?

    と聞かれます。これはAndroidのビルドIDなのですが、com.自分の名前.アプリ名 と言った感じでOKです。

    以上でFlutterで使えるようになります。
    お疲れ様でした!

  • Error: Failed to list Firebase projects. See firebase-debug.log for more info.

    Error: Failed to list Firebase projects. See firebase-debug.log for more info.

    これは何?

    firebase projects:list

    のコマンドを使うと下記のエラーが出てしまいました。これの解決のメモです。

    Error: Failed to list Firebase projects. See firebase-debug.log for more info.

    環境

    • AppleSilicon M1 MacBookAir
    • macOS
    • firebase cli version 13.23.0  

    解決方法

    再度ログインし直しましょう。
    firebase のバージョンアップ後にエラーが出ている場合があります。この場合、再度ログインをし直しましょう。

    firebase login --reauth

    私はこれで解決しました!

  • 決勝進出🎉 都知事杯オープンデータ・ハッカソン

    決勝進出🎉 都知事杯オープンデータ・ハッカソン

    8月末に行われた都知事杯オープンデータハッカソンのファイナリストに選出されました。

    東京都のホームページも紹介していただきました。
    https://odhackathon.metro.tokyo.lg.jp/collection/78/

    都知事杯オープンデータハッカソンとは、東京都が公開しているオープンデータを活用して、新たなサービスやアプリケーションを開発するためのイベントです。

    このハッカソンは、開発者、デザイナー、データサイエンティストなど、多様なバックグラウンドを持つ参加者が集まり、チームを組んでアイデアを形にします。

    都知事杯ファイナリスト

    何を作ったのか

    今回は友人3人で挑戦しました!チーム名は The Hacking Debt です!
    たいしょう、北島産業、コイアイちゃんの三人で出ました。

    サービス内容は

    TOKYO OPEN DATAにあるバリアフリートイレの情報をMap上に表示し、場所や設備情報等を可視化。 また、本アプリは都民全員がこの社会課題解決に参加できる仕組みを提供する。バリアフリートイレの情報をスマホでアップロードすることで、そのデータはTOKYO OPEN DATAに格納されるため、都民が東京都のデータを拡充する。そして、登録されたバリアフリートイレが利用された際は、その情報の貢献者に感謝のメッセージが届く。

    といったものです。新規取引先との商談の際に何かしらハクは欲しかったので嬉しいですね。(ポッと出に頼むよりなんか実績があったほうが頼みやすいですしね)

  • 【実況】Flutter Apple Silicon mac でハローワールドまで

    【実況】Flutter Apple Silicon mac でハローワールドまで

    この記事はとりあえず公式ドキュメントに従って実行するまでを実況しています。またしても私はインターネットデブリを作る。(公式ドキュメントを読もう!)

    https://codelabs.developers.google.com/codelabs/flutter-codelab-first?hl=ja#2

    環境

    • Apple Silicon M1 MacBook Air
    • 16Gb
    • Sequoia 15.0
    • Xcode Version 16.0 (16A242d)

    2024/10/10時点での実行確認

    手順

    Flutter 環境構築

    公式ドキュメントからGet Started のページに移動します。

    このページを参考にしました。

    プラットフォームごとにインストールの手順を解説してくれています。
    https://docs.flutter.dev/get-started/install

    一応 iOS を選択した。()

    rosetta 2 を使うっぽいのでインストール。

    softwarupdate --install--rosetta

    これを読んでる人は大丈夫そうですが……。

    エミュレータ用にXcode, コーディング用にVSCode はインストールしておきましょう。

    VScodeのプラグインはhttps://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter こちらが公式で推薦されていたのでインストールしておきましょう。

    上記のFlutter用の拡張機能のインストールを確認したら。

    VSCodeを使ってFlutterをInstallします。

    次にコマンドパレット[cmd + shift + P]を開いて [Flutter]と入力します。

    選択肢にある[Fluttter: New Project]を選択します。

    SDKがインストールされていない場合は右下にポップアップが出てくるので[Download SDK]を押しましょう。

    どこにSDKをインストールするかを選択できるので、ルートの下にdevelopment フォルダを用意するのがいいでしょう。 ~/development/ フォルダを選択したら[clone Flutter]を押します。

    最初のアプリを作る

    コマンドパレットを開いて flutter: new project をします。プロジェクトは好きなディレクトリを選択します。Project Name は first_flutter_app にしました。

    とりあえず素のまま実行してみる(高いとんかつも最初の一口はそのまま食べろと言われる)

    F5 キーを押すと実行できます。

    カウンターアプリが立ち上がった!! 良さげ〜

  • 【小ネタ】macOS でアイコン画像が入っているディレクトリ

    【小ネタ】macOS でアイコン画像が入っているディレクトリ

    macOS がシステムで使用するアイコンが格納されているフォルダは


    /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources

    にあります。

    この中身が可愛いのでちょっとした紹介です。

    中身はざっくり見るとこんな感じなのですが…。

    中にはもう販売されていない懐かしの Apple 製品たちを見ることができます。

    Apple Xserve 2002年から11年まで産業用に発売されていたラックマウントサーバのアイコンもある……。

    可愛いモノクロアイコンたち

    黒い MacBook https://pc.watch.impress.co.jp/docs/2006/0523/apple.htm PC Watch でその存在を知ったけど本物を見たことがない。

    OS アップデートなどで消えていくアイコンもあるので、たまに見返すと楽しいですね。

  • SwiftUI macOS 新しいウィンドウで開く機能を追加する

    SwiftUI macOS 新しいウィンドウで開く機能を追加する

    これは何?

    macOS 向けの App の開発で SwiftUI を使って、新しいタブを開くやり方の紹介です。

    実装例

    環境

    • Apple Silicon M1 MacBook Air
    • 16 Gb
    • macOS Sequoia 15.0
    • Xcode Version 16.0 (16A242d)

    やり方

    今回は ContentView.swift に設置したボタンを押すと、 PopupWindow.swift が開くものを作ります。

    ウィンドウを用意

    まずは開きたいウィンドウを用意します。
    今回は PopupWindow.swift みたいな適当なファイル名とします。

    //
    //  PopupWindow.swift
    //  sample
    //
    //
    
    import SwiftUI
    import AVKit
    
    struct PopupWindow: View {
        
    
        var body: some View {
            VStack {
               Text("ポップアップウィンドウです")
            }
            .padding()
            .frame(minWidth: 440, minHeight: 480)
        }
    }
    
    #Preview {
        PopupWindow()
    }
    

    windwogroup を追加する

    プロジェクトを作成した際に自動的に作られる、
    アプリ名App.swift ファイルを開きます。

    ここに以下のように追記します。

    //
    //  アプリ名App.swift
    //  sample
    //
    //
    
    import SwiftUI
    
    @main
    struct FolderCustomizerApp: App {
    
        var body: some Scene {
            WindowGroup {
                ContentView()
            }
            // ここを追記した
            WindowGroup(id: "popup") {
                PopupWindow()
            }
        }
    }
    

    ボタンの設置

    最後に ContentView.Swift にボタンを追加ます。

    省略
    
    Button(action: {
        openWindow(id: "popup")
        }) {
        Label("help", systemImage: "keyboard.macwindow")
    }
    
    省略

    以上です! これで動作するはずです。

    もしサイドバーに複数ある情報をクリックして展開するといったことを目指されている場合は公式の
    https://developer.apple.com/jp/videos/play/wwdc2022/10061/ こちらのページがわかりやすくコードつきで解説されているので、こちらをご覧ください。

  • 【コラム】label systemimage を一瞬で探すために SF Symbols 5 をインストールしよう

    【コラム】label systemimage を一瞬で探すために SF Symbols 5 をインストールしよう

    注意 カスみたいなまとめ記事です 内容は無いです

    以下のURLから SF Symbols をダウンロードしましょう。

    https://developer.apple.com/sf-symbols

    こんな感じでネイティブアプリとして、systemimage を検索できるのでめっちゃ便利

    swiftUI でのコーディング中にアイコン付きのボタンを追加したい時がよくあると思いますが、
    SF Symbols のアプリを入れておけば直ぐに参照できます。

                    Button {
                        presented.toggle()
                    } label: {
                        Label("toggle inspector", systemImage: "info.circle")
                    }

    よく使う SF Symbols 紹介

    よく使うもので言うとこんな感じかな(メモを兼ねて幾つか紹介)

    info系
    info.circle は頻繁に使う

    ヘルプ機能には questionmark.circle

    色の変更などの編集系には

    paintbrush

    通知系の

    bell

    macOS なら絶対使う
    サイドバー関係のsymbol

    sidebar.right

  • 【コラム】Predictive Code Completion Model が追加された! Xcode Version 16.0

    【コラム】Predictive Code Completion Model が追加された! Xcode Version 16.0

    注意カスみたいな記事です

    ベータ版から入れている方には今更かもしれませんが、
    Xcode に Predictive Code Completion Model が追加されました!

    Predictive Code Completion Model は Xcode 16 に対応した予測コード補完機能です。VSCode の Copilot と似ており、コード入力時に提案してくれます。

    個人的に Copilot for Xcode を使用していたので Apple さんが純正で搭載してくれたのは嬉しく思います☺️

    動作条件

    • macOS Sequoia
    • 16GB RAM
    • Apple Silicon

    となっているようです。

    使用感

    実際に使ってみました。

    まずはコメントアウトで、どうしたいのかを記述して改行すると…。

    2,3秒後にこんな感じでうっすらした文字で候補を出してくれます。

    tab キーを押すと候補が確定されます。ここら辺の操作感も VScode Copilot と似ています。
    肝心な制度は微妙に感じました…。ちゃんと使いたいなら Copilot for Xcode といった外部プラグインを使うのが良いなと思いました。(2024/09/19現在の所感)

    今後に期待☺️

Home
About
Blog
Works
Contact