🌑

ブラック企業の怖い話

2024/01/19に公開

今日もポエムを書こうと思う

皆さんブラック企業って知ってますか?
基準は人によって違う....

私の体験だと、どんなところかというと😇

  • 俺俺フレームワークを使う
  • アーキテクチャーとかない
  • テストを書かない
  • 自分のやってること以外興味ない
  • レガシーな技術で仕事をする
  • ツール導入したけど使ってない
  • みなし残業がある
  • 給与明細しょうがない... 母に言われるまで気づかなかった😅

Jboyさんは昔ブラック企業にいた

どんなところだったか。ITじゃない業種でもあったけど、労働基準法に違反してたり、そもそも企業なのかって感じでしたね。
そこにいても精神が疲弊するだけでした。

飲食業の時はもっとブラックでした😨

ITの仕事をしていた時の例を出すとスキルが伸びなかった....
今の仕事が嫌だからと転職したが、そこも良いところではなかった。

どうやって抜け出した?

今でもできているか分からないですね。まあ〜最近働いたところはテストコード書いてたし、技術者がいたので、学びがありましたので、個人開発や副業で学んだことを活かしてますね。

SESの良いところは、人数が多い会社で働けたことと、東京の会社だと新しい技術を導入するのが早いので、ちょっとしか触らない技術でも「自分のものにしてやろう」と時間外に積極的に勉強してましたね。バックエンドを経験できたのはよかったですね。

一応経歴にかけるから、評価が上がるし、仕事で触らなかった機能は、自分で覚えれば良いのでね。他のエンジニアさんも自分のものにしようと技術を学んでいましたね。

最近、バックエンドはTypeScriptばかりにあたるのが、流行りなのかたまたまなのかは謎🙃

Wantedlyでよく見かけるツールやnpmのパッケージは触りましたね。趣味で個人開発もしました。

https://typescriptbook.jp/
https://typeorm.io/
https://www.prisma.io/

https://www.atlassian.com/ja/software/jira
https://dbeaver.io/

これが成果物:
https://github.com/sakurakotubaki/TypeORM_PJ
https://github.com/sakurakotubaki/NestPrisma

いろいろなところを転々とした...

Xamarinというクロスプラットフォームを使ったことありますが、開発体験が悪かったです。酷かったのが、毎日新幹線に載って遠くに行くというあり得ないことをしました💦
丸々ソフトさんはクソでしたね😇

地元のシステム系の会社でSEをやってた頃に、Python3を使ってましたが、世の中で広く普及しているFlaskをつかってなかったんで世の中の情報を見ても仕事では、コードはあまり書けなかった💦
結構特殊な技術を使ってなので......

他にもLinuxのコマンドを使って、Sakura VPSにファイルを転送するとか、ミドルウェアを動かしたりとかやってましたが、そんなもんよりAWSの方を覚えたかったですね。あと、Next.js使うと言ってたけど、出番なかったですね。だから個人学習をしてましたね。

📕LINUX勉強するならこの本おすすめですよ!
https://www.amazon.co.jp/新しいLinuxの教科書-三宅-英明/dp/4797380942/ref=sr_1_6?keywords=人気のLinux+入門ランキング&qid=1705648887&sr=8-6

転職というか、副業ではよくあるFlaskをライブラリと組み合わせて、独学でGCPと組み合わせて、REST APIを作りましたね。これ作ったせいで、毎月私に¥10~15の請求が来るようになった😱
でも本業よりもモダンな技術を身につけることができた。働く会社がクソなら、業務で学べることは、0ですね。

https://msiz07-flask-docs-ja.readthedocs.io/ja/latest/
https://librosa.org/doc/latest/index.html

Flutterはどうやって覚えてたのか?

昔は、Flutterのコミュニティに入ったけど勉強方法を間違えていて進まなかった...

やることは単純でした

  • モバイルだとライフサイクルがある
  • WidgetでUIを作る
  • Dartの文法でなんでも良いからビジネスロジックを書く
  • Firebaseを使ってアプリを作る
  • REST APIと通信する処理を作る

これにいつ気づいたのかっていうと、Swiftを勉強してたときですね。画面の更新の話題を聞いてから、ライフサイクル理解しました笑

当時の悩み
誰もriverpodを教えてくれる人がいなかった...
当時は早く覚えなくてはいけなかったので、MENTAというサービスでお金を払って、🍞アンパンマンと🍩ドーナッツを雇って教えてもらってました笑

https://menta.work/

この頃から、毎回記事を書くとき自分のメモ用としてriverpod + firebaseの記事を書いてました。ローカルDBも使えば、画面が切り替わるのも作った。

今だと、新しい書き方に変わってもルールがわかればriverpod generatorを使うことはできてます。なんでもriverpodのプロバイダーで管理するもんじゃないと聞きますけどね。
最近、僕が書いてるコードを真似してる人がいるような気がすることがある???
「まさかね」、外人さんはもっと意味不明なコードを書いている。

日本語の情報も増えてきたので、何度もドキュメントを読んで人のブログを見て真似すれば、ロジックは誰でも作れるのではと思うようになりました。

読んでおいた方が良い箇所は、refって何か、AsyncValueってどう使うのか?
https://riverpod.dev/ja/

refとは?
https://riverpod.dev/ja/docs/concepts/reading#ref-オブジェクトを取得する

プロバイダを利用するには、まず ref オブジェクトを取得する必要があります。

このオブジェクトを通じて、プロバイダと様々なやり取りを行うことになります。 ref はウィジェットもしくはプロバイダから取得することができます。

プロバイダから ref を取得する
プロバイダはすべて ref オブジェクトを引数として受け取ります。

final provider = Provider((ref) {
  // `ref` を通じて他のプロバイダを利用する
  final repository = ref.watch(repositoryProvider);

  return SomeValue(repository);
})

refがあると何が嬉しいかというと、他のプロバイダーを呼ぶことができる。下のコードは自動生成されたfirebaseAuthProviderref.watchで取得することで、インスタンス化されたFirebaseAuthのパッケージを使うことができます。変数を使ってるのと同じ感覚だと私は思ってる。

こんな感じでね:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

part 'auth_provider.g.dart';

// flutter pub run build_runner watch --delete-conflicting-outputs

// FirebaseAuthを提供するProvider

FirebaseAuth firebaseAuth(FirebaseAuthRef ref) {
  return FirebaseAuth.instance;
}

// ログイン状態を監視するStreamを提供するProvider

Stream<User?> authStateChange(AuthStateChangeRef ref) {
  return ref.watch(firebaseAuthProvider).authStateChanges();
}

ref.readだとメソッドを呼び出してボタンを押した時に使えますね。下のコードだと、FirebaseAuthの匿名認証をするコードですね。

import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:widget_cook/sns_app/provider/auth_provider.dart';

class SignInPage extends HookConsumerWidget {
  const SignInPage({super.key});
  
  Widget build(BuildContext context, WidgetRef ref) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Sign In Page'),
      ),
      body: Center(
        child: Column(
          children: [
            ElevatedButton(
              onPressed: () async {
                await ref.read(firebaseAuthProvider).signInAnonymously();
              },
              child: const Text('Sign In'),
            ),
          ],
        ),
      ),
    );
  }
}

公式にはダメなパターンも紹介されているので読んでみると勉強になりますね。

ref.watchを使ってはダメな例:

最後に

今日はまたまたポエムを書いてしまった。なんか最近技術記事を書く意味感じなくて、ポエムだけ書こうかな〜と思うようになりました。まだネタあるので、技術の話と組み合わせられそうだったら書こうかなと思います。

Discussion