First and foremost is a text editor, or better, an IDE. Your IDE/text editor might have GBz80 ASM highlighting support! (I personally use VS Code on Linux.)
Then comes the compiler (in the case of ASM, compilers are also called "assemblers", but you can use both). I use and recommend RGBDS, but some prefer wla-dx. I will be using RGBDS throughout this tutorial, but if for some reason you want to use wla, you will be able to follow (although you will have to make some adjustments).
You have three options to run your code:
|Manipulations to run your code||Debugging||Platform accuracy||Cost||Notes|
|Emulator||Basically none||Depends if the emulator supports it||Usually good but not perfect||Free||Everything heavily depends on the emulator|
|Console (with flashcart)||Can be tedious||No||Perfect||Up to €/$200, depending on what you have and want||This is only recommended to complement emulator testing|
|Official devkit (IS-CGB-DEBUGGER)||Not much||Yes||Perfect||At least $1000||This isn't the best solution, but some devkits are circulating on eBay.
Also, this requires you to use ISAS, the official assembler -- which is worse than RGBDS and wla.
I strongly recommend using an emulator to run initial tests on your game, and optionally run it on console afterwards (to get what the game feels like on console, and to eliminate the emulator's inaccuracies). Or, if you really want to, you can buy a IS-CGB-DEBUGGER and use that -- but you'll have to use ISAS, and the debugger's ancient interface software.
|BGB||Extremely good||Yes, GUI||Windows (x86), Wine|
|SameBoy||Near perfect||Yes, command-line||MacOS, slightly inferior Windows & Linux|
|BizHawk (Gambatte)||Extremely good||Very basic, GUI||Windows|