他力code

Svelte

このサイトもシンプル(かつ手作り感満載?)に見えて実は・・・難しい技術を使っています。


Introduction

2017年よりNode.jsエンジニアとして、さまざまなプロジェクトに従事し、フロントエンドとバックエンドの両方で豊富な経験を積んできました。当時はv8とか、その辺りを使っていたかと記憶しています。サーバーサイド側のユーザー向けAPIを開発したり、VueやReactおよびSvelteなどフロントエンドのフレームワークを活用したWebアプリケーション開発経験があります。AWSやAzureなどクラウドベースのマネージドサービスも盛り込んだ構成をデザインすることも可能です。

私はIT業界における最難関国家資格である「ITストラテジスト」の資格を有しています。現在の本業務は開発現場から離れ、マネジメントおよび会社や事業全体のデジタル化戦略やプロダクトグロース方針などを策定する役割かもしれません。

ただ今でも業務に問わず長年実際に手を動かしている高い技術力と、業務上の役割から求められる広い目線と様々なコネクションから裏打ちされた情報収集能力で、幅広いレイヤーにおいて最新動向を踏まえた対応が可能となります。


Key Skills & Technologies

主に業務、一部のその他場面にて活用したことのあるスタックを表示してみました。 ※以下、アーキテクチャー図はmermaidのBETA機能(2024年9月現在)を使用しております、描画に不備があると思われた際はリロードをしてください。

architecture-beta
    group nodejs(logos:nodejs-icon)[FrontEnd]
    group azure(logos:azure-icon)[ServerSide]
    group node(logos:nodejs-icon)[ServerSide]
    group aws(logos:aws)[ServerSide]
    group repos(logos:git-icon)[OtherEnviroment]

    service vue(logos:vue)[Vuejs] in nodejs
    service react(logos:react)[React] in nodejs
    service svelte(logos:svelte-icon)[Svelte] in nodejs
    service next(logos:nextjs)[Nextjs] in nodejs
    service nuxt(logos:nuxt)[Nuxtjs] in nodejs
    service express(logos:nodejs-icon-alt)[Express] in node
    service pm2(logos:pm2-icon)[pm2] in node
    service nestjs(logos:nestjs)[Nestjs] in node
    service lambda(logos:aws-lambda)[Lambda] in aws
    service s3(logos:aws-s3)[s3Backet] in aws
    service fargate(logos:aws-fargate)[Fargate] in aws
    service ebt(logos:aws-elastic-beanstalk)[Ebt] in aws
    service gateway(logos:aws-api-gateway)[ApiGateway] in aws
    service cloudfront(logos:aws-cloudfront)[Cloudfront] in aws
    service k8s(logos:kubernetes)[AzureK8s] in azure
    service spring(logos:spring-icon)[Spring] in azure
    service postgres(logos:postgresql)[Database] in azure

    service github(cib:github)[Github] in repos
    service gitlab(logos:gitlab)[Gitlab] in repos
    service actions(logos:github-actions)[Actions] in repos
    service netlify(logos:netlify-icon)[CDN] in repos
    service heroku(logos:heroku-icon)[Deploy] in repos
    service firebase(logos:firebase)[NoSQLDatabase] in repos

Portfolio & Case Studies

ここでは実際に行ったプロジェクトのほんの一部を紹介させていただければと思います。具体的には以下となります。

  • SvelteKitとLambdaを使ったLP開発
  • VueおよびSpringを使った業務システム開発
  • Expressおよびpm2を使ったユーザー向けAPIの開発
  • LINEを活用したソリューション -1
  • LINEを活用したソリューション -2

SvelteKitとLambdaを使ったLP開発

このサイトのことですが、SvelteKitを使ったLP(LandingPage)の開発を行なっています。

背景や実現したいこと

個人事業用のサイトを構築し、事業や仕事の内容、およびそれに関連する技術情報、SNS等での公開情報などをまとめて発信したいと考えました。 廉価でかつ軽量なフレームワークを選定したく、フロントエンドはSvelteを採用することとしました。 一部バックエンドで必要な処理が存在するので、こちらもノーコストかつ最小限構成となるようにしたいと考えました。

アーキテクチャ
  • SvelteKitおよび、CSSフレームワークとしてSUMIを採用。
  • markdownをPushすればその内容が記事になるように設計。highlighter.jsおよびmermaid.jsも実装済のため、コード表記も図形描画にも対応。
  • 記事に「いいね」を残すことができるので、サーバーサイド側でLambdaを準備し、その履歴をS3に保管されたJSONにて管理。
  • Svelte側はNetlifyにて、Lmabda側はGithub Actionsにてオートデプロイを実装。
architecture-beta

    group nodejs1(logos:nodejs-icon)[Client]
    group nodejs2(logos:nodejs-icon)[Client]
    group aws(logos:aws)[Cloud]
    group repos1(logos:git-icon)[Repository]
    group repos2(logos:git-icon)[Repository]

    service svelte(logos:svelte-icon)[Svelte] in nodejs1
    service lambda1(logos:aws-lambda)[Lambda] in aws
    service gateway(logos:aws-api-gateway)[ApiGateway] in aws
    service s3(logos:aws-s3)[s3Backet]  in aws
    service github2(cib:github)[SvelteRepos] in repos1
    service github3(cib:github)[LambdaRepos] in repos2
    service netlify(logos:netlify-icon)[NetlifyCDN] in repos1
    service actions(logos:github-actions)[Actions] in repos2
    service typescript(logos:typescript-icon)[Code] in nodejs2

    gateway:R -- L:lambda1
    lambda1:R -- L:s3
    github2:B -- T:svelte
    github2:R -- L:netlify
    svelte:R -- L:gateway
    actions:R -- L:github3
    lambda1:B -- T:actions
    github3:R -- L:typescript
詳細内容やリンク
パッケージ名 説明 URL
Svelte Material UI Svelte版 Material UIフレームワークパッケージ https://sveltematerialui.com/
highlight.js コードブロックのシンタックスハイライト機能 https://highlightjs.org/
mermaid.js markdownのコードブロック表記による図形やチャート表示機能 https://mermaid.js.org/

VueおよびSpringを使った業務システム開発

社内業務システムにてVueおよびSpringを活用した開発を行いました。

アーキテクチャ
  • フロントエンドはVue.js、バックエンドはJavaのSpringを使った構成。
  • リポジトリはGitlabを使い、データベースはPostgresを使いました、OR-Mapper(MyBatis)を活用。
  • クラウドはAzure環境を使い、AKSを活用したマイクロサービスアーキテクチャを実現。
architecture-beta

    group nodejs3(logos:nodejs-icon)[Client]
    group azure(logos:azure-icon)[Cloud]
    group repos1(logos:git-icon)[Repository]
    group repos2(logos:git-icon)[Repository]

    service vue(logos:vue)[Vuejs] in nodejs3
    service k8s(logos:kubernetes)[AzureK8s] in azure
    service spring(logos:spring-icon)[Spring] in azure
    service postgres(logos:postgresql)[Database] in azure
    service gitlab1(logos:gitlab)[VueRepository] in repos1
    service gitlab2(logos:gitlab)[SpringRepository] in repos2

    vue:R -- L:spring
    gitlab1:B -- T:vue
    spring:R -- L:gitlab2
    spring:B -- T:postgres

Expressおよびpm2を使ったユーザー向けAPIの開発

Node.jsで初めて構築したユーザー向けAPIサービスです。

背景や実現したいこと

業務データをAPIで提供することで、ブラウザUIに依存しない柔軟な業務効率化が可能だと考えていました。特に、MicrosoftやGoogle、RPAなどのツールと組み合わせることで、画一的なUIの制約を軽減し、利用者に柔軟性を持たせることを目指しました。この背景からAPIプラットフォームを構築しました。

アーキテクチャ
  • シンプルな構成: 業務内での活用を想定し、スケーラビリティは重視せず、IaaS上で構築。一定のスペックを持つものの、複雑さを避けました。
  • Expressの採用: 当時の主流であったExpressを使用し、リバースプロキシの配下で運用。
  • プロセス監視: pm2を用いてNode.jsプロセスを簡単に管理し、デーモン化を実現。
architecture-beta

    group nodejs4(logos:nodejs-icon)[Server]
    group client(ic:baseline-account-circle)[User]

    service express(logos:nodejs-icon-alt)[Express] in nodejs4
    service pm2(logos:pm2-icon)[pm2] in nodejs4
    service postgres(logos:postgresql)[Database] in nodejs4
    service postman(logos:postman-icon)[exPostman] in client

    postman:R -- L:express
    express:B -- T:postgres

LINEを活用したソリューション - 1

自身が運用しているInstagramアカウント(京都・奈良の風景を発信するアカウント)向けに実装したLINE通知ソリューションです。

背景や実現したいこと

INE公式アカウントの友だちに、Instagram投稿の都度通知が送信される仕組みを構築。また、キーワードを投稿すると、その関連投稿をInstagramから検索し、上位5件のリンクやWikipedia情報を返信します。これにより、友だちとの双方向コミュニケーションが可能です。

アーキテクチャ
  • LINE Messaging APIを活用
  • heroku環境にTypeScriptベースの「nest.js」でWebhookサーバーを構築
  • Gitへのpushでオートデプロイ
  • facebookAPIでInstagramの投稿やハッシュタグを検索
  • firebaseでユーザー管理
architecture-beta

    group heroku0(logos:heroku-icon)[ServerSide]
    group cloud(ic:outline-cloud)[Cloud]
    group line(ic:baseline-account-circle)[User]

    service nestjs(logos:nestjs)[Webhook] in heroku0
    service facebook(logos:facebook)[API] in cloud
    service instagram(cib:instagram)[Contents] in cloud
    service firebase(logos:firebase)[NoSQLDatabase] in cloud
    service channel(cib:line)[OfficalChannel] in line
    service git(logos:git-icon)[Repository] in heroku0

    channel:R -- L:nestjs
    nestjs:R -- L:facebook
    nestjs:B -- T:git
    nestjs:R -- L:firebase
    facebook:R -- L:instagram
詳細内容やリンク
リポジトリ名 説明 Github
vertrek_kyoto-linebots-webhook-on-heroku nest.jsにて構築されたWebhook用のサーバー https://github.com/takafumikobayashi/vertrek_kyoto-linebots-webhook-on-heroku

LINEを活用したソリューション - 2

こちらはLINEとRaspberry Piのカメラを使い、留守中にペット(ネコ)を監視する仕組みです。

背景や実現したいこと

家族の誰でもLINEで簡単に使える仕組みを目指し、より自然な会話でペットの様子を確認できるようにしたい。さらに、撮影された画像や動画を機械的に分析し、ネコがいるか、何をしているかを判断してもらいたいと考えました。

アーキテクチャ
  • LINE MessagingAPIを使って実現。
  • API GatewayとLambdaでリクエストを受け、SQSに保存。
  • Raspberry PiがSQSをポーリングし、リクエストを検知したら処理を開始。
  • 投稿された文章から、動画が欲しいのか?静止画が欲しいのか?何枚欲しいのか?をOpenAI(GPT-4o-mini)にて分析、その内容にて撮影を実施。
  • 撮影されたデータはS3に保存、かつRekognitionを使って分析。
  • Rekognitionの内容に基づき、ネコの状況を判断し、LINEに画像・動画リンクとともに返信。

これにより自然な会話の中でユーザーはリクエスト、またその結果として自然な結果を返してくれることを実現、より普段の会話に近い形でのコミュニケーションを実現しています。

architecture-beta

    group line21(ic:baseline-account-circle)[User]
    group line22(ic:baseline-account-circle)[User]
    group raspi(logos:raspberry-pi)[RaspberryPi]
    group aws2(logos:aws)[Cloud]
    group cloud2(ic:outline-cloud)[Cloud]


    service channel21(cib:line)[PostMessage] in line21
    service channel22(cib:line)[RecievePhotos] in line22
    service gateway2(logos:aws-api-gateway)[APIGateway] in aws2
    service lambda2(logos:aws-lambda)[Lambda] in aws2
    service sqs(logos:aws-sqs)[SQS] in aws2
    service s32(logos:aws-s3)[S3Bucket] in aws2
    service express21(logos:nodejs-icon-alt)[Express] in raspi
    service express22(logos:nodejs-icon-alt)[Express] in raspi
    service camera(ic:baseline-camera-alt)[Camera] in raspi
    service pm22(logos:pm2-icon)[pm2] in raspi
    service openai(logos:openai-icon)[OpenAI] in cloud2

    channel21:R -- L:gateway2
    gateway2:R -- L:lambda2
    lambda2:R -- L:sqs
    sqs:R -- L:express21
    express21:R -- L:openai
    express21:B -- T:camera
    camera:B -- T:express22
    s32:R -- L:camera
    s32:B -- T:channel22
    channel22:R -- L:express22
詳細内容やリンク
リポジトリ名 説明 Github
raspi-catcam RaspberryPi側で実装してるNode.jsサーバー https://github.com/takafumikobayashi/raspi-catcam
raspi-catcam-lambda AWS側で実装しているLambdaのソースコードとGithub Acrionsの設定 https://github.com/takafumikobayashi/raspi-catcam-lambda

Services Offered

Node.jsでお困りなことはありませんか? こうした経験を踏まえ、以下のご支援・サービスが可能です。

コンサルティング

  • フロントエンドフレームワークを使ってWebサイトやWebアプリを構築したい。
  • Node.jsを駆使したモダンなサイトを構築したいが何から始めればよいのかわからない。
  • やりたい目的に沿ったフレームワークや技術の選定をしたい。
  • これらを総合的に勘案し、事業フェーズやコストの観点を盛り込んだWebシステム化戦略策定を支援してほしい。

講師・ハンズオン

  • Node.jsやJavaScriptの基礎研修。
  • ReactやSvelteなどのフレームワークを使ったハンズオン研修。
  • 本格的なSQLの研修(初級から上級者向けまで)。

AIを活用した開発支援

  • Github Copilotを活用したコーディング手法の研修・ハンズオン。
  • OpenAIを活用したペアプログラミング、ゼロベースのコーディング、およびデバック・トラブルシューティングの進め方とテクニック。

など


Conclusion

最後に

今回ご紹介した技術スタックやプロジェクト事例は、私の豊富な経験とスキルを反映したものです。Node.jsやSvelteをはじめとする最新技術を活用し、クライアントのニーズに合わせた柔軟かつ効率的なソリューション提供が可能です。ぜひ開発やコンサルティングのご依頼をご検討ください。


参考リンク

以下は関連する技術ドキュメントです: